Correct errors resulting in "No handlers ..." error message

This is a checkin for the issue of having errors that read "No
handlers could be found for logger X.Y.Z" when running tests. While
being annoying, it is also a serious issue in that some times, the
lack of logging masks errors in the tests. One such example is fixed
in this chkin (see bug 1491093).

Change-Id: I4066d226aefbd23248e88692db109d31f5c150e9
Partial-Bug: #1491075
Closes-Bug: #1491093
This commit is contained in:
Amrith Kumar 2015-10-17 18:29:57 -04:00
parent 709a33f8be
commit 34ce70e299
30 changed files with 383 additions and 137 deletions

View File

@ -35,6 +35,7 @@ from trove.common.rpc import version as rpc_version
from trove.common import utils from trove.common import utils
from trove import rpc from trove import rpc
from trove.tests.config import CONFIG from trove.tests.config import CONFIG
from trove.tests import root_logger
eventlet.monkey_patch(thread=False) eventlet.monkey_patch(thread=False)
@ -61,6 +62,8 @@ def add_support_for_localization():
def initialize_trove(config_file): def initialize_trove(config_file):
from trove.common import pastedeploy from trove.common import pastedeploy
root_logger.DefaultRootLogger()
cfg.CONF(args=[], cfg.CONF(args=[],
project='trove', project='trove',
default_config_files=[config_file]) default_config_files=[config_file])

View File

@ -0,0 +1,70 @@
# Copyright 2015 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.
import logging
import traceback
class DefaultRootHandler(logging.StreamHandler):
"""A singleton StreamHandler"""
__handler = logging.StreamHandler()
__singleton = None
__info = None
@classmethod
def activate(cls):
# leverage the singleton __handler which has an
# acquire() method to create a critical section.
cls.__handler.acquire()
if cls.__singleton is None:
cls.__singleton = DefaultRootHandler()
cls.__handler.release()
return cls.__singleton
@classmethod
def set_info(cls, info=None):
cls.__info = info
def __init__(self):
if DefaultRootHandler.__singleton is not None:
raise Exception(
"Do not directly instantiate DefaultRootHandler(). "
"Only use the activate() class method.")
super(DefaultRootHandler, self).__init__()
def emit(self, record):
msg = ("[" + record.name + "]\n" +
self.format(record) + "\n" +
(("\tFrom: " + DefaultRootHandler.__info + "\n")
if DefaultRootHandler.__info
else (''.join(traceback.format_stack()))))
self.stream.write(msg)
self.flush()
class DefaultRootLogger(object):
"""A root logger that uses the singleton handler"""
def __init__(self):
super(DefaultRootLogger, self).__init__()
handler = DefaultRootHandler.activate()
handler.acquire()
if handler not in logging.getLogger('').handlers:
logging.getLogger('').addHandler(handler)
handler.release()

View File

@ -383,7 +383,8 @@ class BackupAgentTest(trove_testtools.TestCase):
@patch.object(conductor_api.API, 'get_client', Mock(return_value=Mock())) @patch.object(conductor_api.API, 'get_client', Mock(return_value=Mock()))
@patch.object(conductor_api.API, 'update_backup', @patch.object(conductor_api.API, 'update_backup',
Mock(return_value=Mock())) Mock(return_value=Mock()))
def test_execute_lossy_backup(self): @patch('trove.guestagent.backup.backupagent.LOG')
def test_execute_lossy_backup(self, mock_logging):
"""This test verifies that incomplete writes to swift will fail.""" """This test verifies that incomplete writes to swift will fail."""
with patch.object(MockSwift, 'save', with patch.object(MockSwift, 'save',
return_value=(False, 'Error', 'y', 'z')): return_value=(False, 'Error', 'y', 'z')):
@ -430,7 +431,8 @@ class BackupAgentTest(trove_testtools.TestCase):
bkup_info, bkup_info,
'/var/lib/mysql/data') '/var/lib/mysql/data')
def test_restore_unknown(self): @patch('trove.guestagent.backup.backupagent.LOG')
def test_restore_unknown(self, mock_logging):
with patch.object(backupagent, 'get_restore_strategy', with patch.object(backupagent, 'get_restore_strategy',
side_effect=ImportError): side_effect=ImportError):
@ -451,7 +453,8 @@ class BackupAgentTest(trove_testtools.TestCase):
@patch.object(MockSwift, 'load_metadata', return_value={'lsn': '54321'}) @patch.object(MockSwift, 'load_metadata', return_value={'lsn': '54321'})
@patch.object(MockStorage, 'save_metadata') @patch.object(MockStorage, 'save_metadata')
@patch.object(backupagent, 'get_storage_strategy', return_value=MockSwift) @patch.object(backupagent, 'get_storage_strategy', return_value=MockSwift)
def test_backup_incremental_metadata(self, @patch('trove.guestagent.backup.backupagent.LOG')
def test_backup_incremental_metadata(self, mock_logging,
get_storage_strategy_mock, get_storage_strategy_mock,
save_metadata_mock, save_metadata_mock,
load_metadata_mock, load_metadata_mock,
@ -471,7 +474,9 @@ class BackupAgentTest(trove_testtools.TestCase):
'location': 'fake-location', 'location': 'fake-location',
'type': 'InnoBackupEx', 'type': 'InnoBackupEx',
'checksum': 'fake-checksum', 'checksum': 'fake-checksum',
'parent': {'location': 'fake', 'checksum': 'md5'} 'parent': {'location': 'fake', 'checksum': 'md5'},
'datastore': 'mysql',
'datastore_version': 'bo.gus'
} }
agent.execute_backup(TroveContext(), agent.execute_backup(TroveContext(),

View File

@ -63,7 +63,8 @@ class SwiftStorageSaveChecksumTests(trove_testtools.TestCase):
location, location,
"Incorrect swift location was returned.") "Incorrect swift location was returned.")
def test_swift_segment_checksum_etag_mismatch(self): @patch('trove.guestagent.strategies.storage.swift.LOG')
def test_swift_segment_checksum_etag_mismatch(self, mock_logging):
"""This tests that when etag doesn't match segment uploaded checksum """This tests that when etag doesn't match segment uploaded checksum
False is returned and None for checksum and location False is returned and None for checksum and location
""" """
@ -96,7 +97,8 @@ class SwiftStorageSaveChecksumTests(trove_testtools.TestCase):
location, location,
"Incorrect swift location was returned.") "Incorrect swift location was returned.")
def test_swift_checksum_etag_mismatch(self): @patch('trove.guestagent.strategies.storage.swift.LOG')
def test_swift_checksum_etag_mismatch(self, mock_logging):
"""This tests that when etag doesn't match swift checksum False is """This tests that when etag doesn't match swift checksum False is
returned and None for checksum and location returned and None for checksum and location
""" """
@ -157,7 +159,8 @@ class SwiftStorageUtils(trove_testtools.TestCase):
match = self.swift._verify_checksum('"my-good-etag"', 'my-good-etag') match = self.swift._verify_checksum('"my-good-etag"', 'my-good-etag')
self.assertTrue(match) self.assertTrue(match)
def test_verify_checksum_bad(self): @patch('trove.guestagent.strategies.storage.swift.LOG')
def test_verify_checksum_bad(self, mock_logging):
self.assertRaises(SwiftDownloadIntegrityError, self.assertRaises(SwiftDownloadIntegrityError,
self.swift._verify_checksum, self.swift._verify_checksum,
'"THE-GOOD-THE-BAD"', '"THE-GOOD-THE-BAD"',
@ -192,7 +195,8 @@ class SwiftStorageLoad(trove_testtools.TestCase):
download_stream = storage_strategy.load(location, backup_checksum) download_stream = storage_strategy.load(location, backup_checksum)
self.assertIsNotNone(download_stream) self.assertIsNotNone(download_stream)
def test_run_verify_checksum_mismatch(self): @patch('trove.guestagent.strategies.storage.swift.LOG')
def test_run_verify_checksum_mismatch(self, mock_logging):
"""This tests that SwiftDownloadIntegrityError is raised and swift """This tests that SwiftDownloadIntegrityError is raised and swift
download cmd does not run when original backup checksum download cmd does not run when original backup checksum
does not match swift object etag does not match swift object etag

View File

@ -143,7 +143,8 @@ class ClusterTest(trove_testtools.TestCase):
None None
) )
def test_delete_bad_task_status(self): @patch('trove.cluster.models.LOG')
def test_delete_bad_task_status(self, mock_logging):
self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL
self.assertRaises(exception.UnprocessableEntity, self.assertRaises(exception.UnprocessableEntity,
self.cluster.delete) self.cluster.delete)
@ -170,7 +171,8 @@ class ClusterTest(trove_testtools.TestCase):
self.cluster.delete() self.cluster.delete()
mock_update_db.assert_called_with(task_status=ClusterTasks.DELETING) mock_update_db.assert_called_with(task_status=ClusterTasks.DELETING)
def test_add_shard_bad_task_status(self): @patch('trove.common.strategies.cluster.experimental.mongodb.api.LOG')
def test_add_shard_bad_task_status(self, mock_logging):
task_status = ClusterTasks.BUILDING_INITIAL task_status = ClusterTasks.BUILDING_INITIAL
self.cluster.db_info.task_status = task_status self.cluster.db_info.task_status = task_status
self.assertRaises(exception.UnprocessableEntity, self.assertRaises(exception.UnprocessableEntity,

View File

@ -273,7 +273,8 @@ class ClusterTest(trove_testtools.TestCase):
mock_db_create.return_value.id) mock_db_create.return_value.id)
self.assertEqual(3, mock_ins_create.call_count) self.assertEqual(3, mock_ins_create.call_count)
def test_delete_bad_task_status(self): @patch('trove.cluster.models.LOG')
def test_delete_bad_task_status(self, mock_logging):
self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL
self.assertRaises(exception.UnprocessableEntity, self.assertRaises(exception.UnprocessableEntity,
self.cluster.delete) self.cluster.delete)

View File

@ -243,7 +243,8 @@ class ClusterTest(trove_testtools.TestCase):
self.cluster.shrink(['id1']) self.cluster.shrink(['id1'])
self.assertEqual(1, mock_ins_delete.call_count) self.assertEqual(1, mock_ins_delete.call_count)
def test_delete_bad_task_status(self): @patch('trove.cluster.models.LOG')
def test_delete_bad_task_status(self, mock_logging):
self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL
self.assertRaises(exception.UnprocessableEntity, self.assertRaises(exception.UnprocessableEntity,
self.cluster.delete) self.cluster.delete)

View File

@ -258,7 +258,8 @@ class ClusterTest(trove_testtools.TestCase):
mock_db_create.return_value.id) mock_db_create.return_value.id)
self.assertEqual(3, mock_ins_create.call_count) self.assertEqual(3, mock_ins_create.call_count)
def test_delete_bad_task_status(self): @patch('trove.cluster.models.LOG')
def test_delete_bad_task_status(self, mock_logging):
self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL self.cluster.db_info.task_status = ClusterTasks.BUILDING_INITIAL
self.assertRaises(exception.UnprocessableEntity, self.assertRaises(exception.UnprocessableEntity,
self.cluster.delete) self.cluster.delete)

View File

@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from mock import patch
from trove.backup import models as bkup_models from trove.backup import models as bkup_models
from trove.backup import state from trove.backup import state
from trove.common import exception as t_exception from trove.common import exception as t_exception
@ -74,7 +76,8 @@ class ConductorMethodTests(trove_testtools.TestCase):
self.assertRaises(t_exception.ModelNotFoundError, self.assertRaises(t_exception.ModelNotFoundError,
self.cond_mgr.heartbeat, None, new_id, {}) self.cond_mgr.heartbeat, None, new_id, {})
def test_heartbeat_instance_no_changes(self): @patch('trove.conductor.manager.LOG')
def test_heartbeat_instance_no_changes(self, mock_logging):
iss_id = self._create_iss() iss_id = self._create_iss()
old_iss = self._get_iss(iss_id) old_iss = self._get_iss(iss_id)
self.cond_mgr.heartbeat(None, self.instance_id, {}) self.cond_mgr.heartbeat(None, self.instance_id, {})
@ -83,7 +86,8 @@ class ConductorMethodTests(trove_testtools.TestCase):
self.assertEqual(old_iss.status_description, self.assertEqual(old_iss.status_description,
new_iss.status_description) new_iss.status_description)
def test_heartbeat_instance_status_bogus_change(self): @patch('trove.conductor.manager.LOG')
def test_heartbeat_instance_status_bogus_change(self, mock_logging):
iss_id = self._create_iss() iss_id = self._create_iss()
old_iss = self._get_iss(iss_id) old_iss = self._get_iss(iss_id)
new_status = 'potato salad' new_status = 'potato salad'
@ -97,7 +101,8 @@ class ConductorMethodTests(trove_testtools.TestCase):
self.assertEqual(old_iss.status_description, self.assertEqual(old_iss.status_description,
new_iss.status_description) new_iss.status_description)
def test_heartbeat_instance_status_changed(self): @patch('trove.conductor.manager.LOG')
def test_heartbeat_instance_status_changed(self, mock_logging):
iss_id = self._create_iss() iss_id = self._create_iss()
payload = {'service_status': ServiceStatuses.BUILDING.description} payload = {'service_status': ServiceStatuses.BUILDING.description}
self.cond_mgr.heartbeat(None, self.instance_id, payload) self.cond_mgr.heartbeat(None, self.instance_id, payload)
@ -112,7 +117,8 @@ class ConductorMethodTests(trove_testtools.TestCase):
self.cond_mgr.update_backup, self.cond_mgr.update_backup,
None, self.instance_id, new_bkup_id) None, self.instance_id, new_bkup_id)
def test_backup_instance_id_nomatch(self): @patch('trove.conductor.manager.LOG')
def test_backup_instance_id_nomatch(self, mock_logging):
new_iid = utils.generate_uuid() new_iid = utils.generate_uuid()
bkup_id = self._create_backup('nomatch') bkup_id = self._create_backup('nomatch')
old_name = self._get_backup(bkup_id).name old_name = self._get_backup(bkup_id).name
@ -121,14 +127,16 @@ class ConductorMethodTests(trove_testtools.TestCase):
bkup = self._get_backup(bkup_id) bkup = self._get_backup(bkup_id)
self.assertEqual(old_name, bkup.name) self.assertEqual(old_name, bkup.name)
def test_backup_bogus_fields_not_changed(self): @patch('trove.conductor.manager.LOG')
def test_backup_bogus_fields_not_changed(self, mock_logging):
bkup_id = self._create_backup('bogus') bkup_id = self._create_backup('bogus')
self.cond_mgr.update_backup(None, self.instance_id, bkup_id, self.cond_mgr.update_backup(None, self.instance_id, bkup_id,
not_a_valid_field="INVALID") not_a_valid_field="INVALID")
bkup = self._get_backup(bkup_id) bkup = self._get_backup(bkup_id)
self.assertFalse(hasattr(bkup, 'not_a_valid_field')) self.assertFalse(hasattr(bkup, 'not_a_valid_field'))
def test_backup_real_fields_changed(self): @patch('trove.conductor.manager.LOG')
def test_backup_real_fields_changed(self, mock_logging):
bkup_id = self._create_backup('realrenamed') bkup_id = self._create_backup('realrenamed')
new_name = "recently renamed" new_name = "recently renamed"
self.cond_mgr.update_backup(None, self.instance_id, bkup_id, self.cond_mgr.update_backup(None, self.instance_id, bkup_id,
@ -137,8 +145,8 @@ class ConductorMethodTests(trove_testtools.TestCase):
self.assertEqual(new_name, bkup.name) self.assertEqual(new_name, bkup.name)
# --- Tests for discarding old messages --- # --- Tests for discarding old messages ---
@patch('trove.conductor.manager.LOG')
def test_heartbeat_newer_timestamp_accepted(self): def test_heartbeat_newer_timestamp_accepted(self, mock_logging):
new_p = {'service_status': ServiceStatuses.NEW.description} new_p = {'service_status': ServiceStatuses.NEW.description}
build_p = {'service_status': ServiceStatuses.BUILDING.description} build_p = {'service_status': ServiceStatuses.BUILDING.description}
iss_id = self._create_iss() iss_id = self._create_iss()
@ -150,7 +158,8 @@ class ConductorMethodTests(trove_testtools.TestCase):
iss = self._get_iss(iss_id) iss = self._get_iss(iss_id)
self.assertEqual(ServiceStatuses.BUILDING, iss.status) self.assertEqual(ServiceStatuses.BUILDING, iss.status)
def test_heartbeat_older_timestamp_discarded(self): @patch('trove.conductor.manager.LOG')
def test_heartbeat_older_timestamp_discarded(self, mock_logging):
new_p = {'service_status': ServiceStatuses.NEW.description} new_p = {'service_status': ServiceStatuses.NEW.description}
build_p = {'service_status': ServiceStatuses.BUILDING.description} build_p = {'service_status': ServiceStatuses.BUILDING.description}
iss_id = self._create_iss() iss_id = self._create_iss()

View File

@ -11,6 +11,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from mock import patch
import uuid import uuid
from trove.common import exception from trove.common import exception
@ -103,7 +104,8 @@ class AgentHeartBeatTest(trove_testtools.TestCase):
self.assertIsNone(heartbeat_found) self.assertIsNone(heartbeat_found)
self.assertTrue(exception_raised) self.assertTrue(exception_raised)
def test_find_by_instance_id_not_found(self): @patch('trove.guestagent.models.LOG')
def test_find_by_instance_id_not_found(self, mock_logging):
""" """
Test to retrieve a guest agents when id is not found Test to retrieve a guest agents when id is not found
""" """

View File

@ -92,12 +92,14 @@ class ApiTest(trove_testtools.TestCase):
self._verify_rpc_prepare_before_cast() self._verify_rpc_prepare_before_cast()
self._verify_cast('create_user', users='test_user') self._verify_cast('create_user', users='test_user')
def test_api_cast_exception(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_cast_exception(self, mock_logging):
self.call_context.cast.side_effect = IOError('host down') self.call_context.cast.side_effect = IOError('host down')
self.assertRaises(exception.GuestError, self.api.create_user, self.assertRaises(exception.GuestError, self.api.create_user,
'test_user') 'test_user')
def test_api_call_exception(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_call_exception(self, mock_logging):
self.call_context.call.side_effect = IOError('host_down') self.call_context.call.side_effect = IOError('host_down')
self.assertRaises(exception.GuestError, self.api.list_users) self.assertRaises(exception.GuestError, self.api.list_users)
@ -105,12 +107,14 @@ class ApiTest(trove_testtools.TestCase):
self.call_context.call.side_effect = Timeout() self.call_context.call.side_effect = Timeout()
self.assertRaises(exception.GuestTimeout, self.api.restart) self.assertRaises(exception.GuestTimeout, self.api.restart)
def test_api_cast_remote_error(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_cast_remote_error(self, mock_logging):
self.call_context.cast.side_effect = RemoteError('Error') self.call_context.cast.side_effect = RemoteError('Error')
self.assertRaises(exception.GuestError, self.api.delete_database, self.assertRaises(exception.GuestError, self.api.delete_database,
'test_db') 'test_db')
def test_api_call_remote_error(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_call_remote_error(self, mock_logging):
self.call_context.call.side_effect = RemoteError('Error') self.call_context.call.side_effect = RemoteError('Error')
self.assertRaises(exception.GuestError, self.api.stop_db) self.assertRaises(exception.GuestError, self.api.stop_db)

View File

@ -158,7 +158,9 @@ class GuestAgentCouchbaseManagerTest(testtools.TestCase):
self.assertEqual(stat.S_IRUSR, filepermissions & 0o777) self.assertEqual(stat.S_IRUSR, filepermissions & 0o777)
@mock.patch.object(utils, 'execute_with_timeout', Mock(return_value=0)) @mock.patch.object(utils, 'execute_with_timeout', Mock(return_value=0))
def test_write_password_to_file2(self): @mock.patch(
'trove.guestagent.datastore.experimental.couchbase.service.LOG')
def test_write_password_to_file2(self, mock_logging):
self.original_mkstemp = tempfile.mkstemp self.original_mkstemp = tempfile.mkstemp
self.tempname = None self.tempname = None

View File

@ -158,7 +158,9 @@ class DbaasTest(testtools.TestCase):
mock_remove.assert_not_called() mock_remove.assert_not_called()
@patch.object(operating_system, 'remove') @patch.object(operating_system, 'remove')
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_fail_password_update_content_clear_expired_password(self, def test_fail_password_update_content_clear_expired_password(self,
mock_logging,
mock_remove): mock_remove):
secret_content = ("# The random password set for the " secret_content = ("# The random password set for the "
"root user at Wed May 14 14:06:38 2014 " "root user at Wed May 14 14:06:38 2014 "
@ -170,12 +172,14 @@ class DbaasTest(testtools.TestCase):
self.assertEqual(2, dbaas_base.utils.execute.call_count) self.assertEqual(2, dbaas_base.utils.execute.call_count)
mock_remove.assert_not_called() mock_remove.assert_not_called()
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
@patch.object(operating_system, 'remove') @patch.object(operating_system, 'remove')
@patch.object(dbaas_base.utils, 'execute', @patch.object(dbaas_base.utils, 'execute',
side_effect=ProcessExecutionError) side_effect=ProcessExecutionError)
def test_fail_retrieve_secret_content_clear_expired_password(self, def test_fail_retrieve_secret_content_clear_expired_password(self,
mock_execute, mock_execute,
mock_remove): mock_remove,
mock_logging):
dbaas_base.clear_expired_password() dbaas_base.clear_expired_password()
self.assertEqual(1, mock_execute.call_count) self.assertEqual(1, mock_execute.call_count)
mock_remove.assert_not_called() mock_remove.assert_not_called()
@ -686,7 +690,8 @@ class MySqlAdminTest(testtools.TestCase):
self.assertTrue(text in args[0].text, "%s not in query." % text) self.assertTrue(text in args[0].text, "%s not in query." % text)
self.assertEqual(1, mock_associate_dbs.call_count) self.assertEqual(1, mock_associate_dbs.call_count)
def test_fail_get_user(self): @patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_fail_get_user(self, *args):
username = "os_admin" username = "os_admin"
hostname = "host" hostname = "host"
self.assertRaisesRegexp(BadRequest, "Username os_admin is not valid", self.assertRaisesRegexp(BadRequest, "Username os_admin is not valid",
@ -709,7 +714,8 @@ class MySqlAdminTest(testtools.TestCase):
self.assertTrue(dbaas.LocalSqlClient.execute.called, self.assertTrue(dbaas.LocalSqlClient.execute.called,
"The client object was not called") "The client object was not called")
def test_fail_grant_access(self): @patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_fail_grant_access(self, *args):
user = MagicMock() user = MagicMock()
user.name = "test_user" user.name = "test_user"
user.host = "%" user.host = "%"
@ -872,16 +878,20 @@ class MySqlAppTest(testtools.TestCase):
rd_instance.ServiceStatuses.SHUTDOWN.description})) rd_instance.ServiceStatuses.SHUTDOWN.description}))
self.assertEqual(2, mock_execute.call_count) self.assertEqual(2, mock_execute.call_count)
def test_stop_mysql_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_stop_mysql_error(self, *args):
dbaas_base.utils.execute_with_timeout = Mock() dbaas_base.utils.execute_with_timeout = Mock()
self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING) self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING)
self.mySqlApp.state_change_wait_time = 1 self.mySqlApp.state_change_wait_time = 1
self.assertRaises(RuntimeError, self.mySqlApp.stop_db) self.assertRaises(RuntimeError, self.mySqlApp.stop_db)
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
@patch.object(operating_system, 'service_discovery', @patch.object(operating_system, 'service_discovery',
side_effect=KeyError('error')) side_effect=KeyError('error'))
@patch.object(utils, 'execute_with_timeout') @patch.object(utils, 'execute_with_timeout')
def test_stop_mysql_key_error(self, mock_execute, mock_service): def test_stop_mysql_key_error(self, mock_execute, mock_service,
mock_logging):
self.assertRaisesRegexp(RuntimeError, 'Service is not discovered.', self.assertRaisesRegexp(RuntimeError, 'Service is not discovered.',
self.mySqlApp.stop_db) self.mySqlApp.stop_db)
self.assertEqual(0, mock_execute.call_count) self.assertEqual(0, mock_execute.call_count)
@ -915,8 +925,9 @@ class MySqlAppTest(testtools.TestCase):
self.assertFalse(self.mySqlApp.start_mysql.called) self.assertFalse(self.mySqlApp.start_mysql.called)
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
@patch.object(dbaas.MySqlApp, 'get_data_dir', return_value='some path') @patch.object(dbaas.MySqlApp, 'get_data_dir', return_value='some path')
def test_wipe_ib_logfiles_error(self, get_datadir_mock): def test_wipe_ib_logfiles_error(self, get_datadir_mock, mock_logging):
mocked = Mock(side_effect=ProcessExecutionError('Error')) mocked = Mock(side_effect=ProcessExecutionError('Error'))
dbaas_base.utils.execute_with_timeout = mocked dbaas_base.utils.execute_with_timeout = mocked
@ -944,7 +955,9 @@ class MySqlAppTest(testtools.TestCase):
{'service_status': {'service_status':
rd_instance.ServiceStatuses.RUNNING.description})) rd_instance.ServiceStatuses.RUNNING.description}))
def test_start_mysql_runs_forever(self): @patch('trove.guestagent.datastore.mysql_common.service.LOG')
@patch('trove.guestagent.datastore.service.LOG')
def test_start_mysql_runs_forever(self, *args):
dbaas_base.utils.execute_with_timeout = Mock() dbaas_base.utils.execute_with_timeout = Mock()
self.mySqlApp._enable_mysql_on_boot = Mock() self.mySqlApp._enable_mysql_on_boot = Mock()
@ -957,7 +970,9 @@ class MySqlAppTest(testtools.TestCase):
{'service_status': {'service_status':
rd_instance.ServiceStatuses.SHUTDOWN.description})) rd_instance.ServiceStatuses.SHUTDOWN.description}))
def test_start_mysql_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_start_mysql_error(self, *args):
self.mySqlApp._enable_mysql_on_boot = Mock() self.mySqlApp._enable_mysql_on_boot = Mock()
mocked = Mock(side_effect=ProcessExecutionError('Error')) mocked = Mock(side_effect=ProcessExecutionError('Error'))
@ -979,7 +994,8 @@ class MySqlAppTest(testtools.TestCase):
self.assertEqual(rd_instance.ServiceStatuses.RUNNING, self.assertEqual(rd_instance.ServiceStatuses.RUNNING,
self.appStatus._get_actual_db_status()) self.appStatus._get_actual_db_status())
def test_start_db_with_conf_changes_mysql_is_running(self): @patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_start_db_with_conf_changes_mysql_is_running(self, *args):
self.mySqlApp.start_mysql = Mock() self.mySqlApp.start_mysql = Mock()
self.appStatus.status = rd_instance.ServiceStatuses.RUNNING self.appStatus.status = rd_instance.ServiceStatuses.RUNNING
@ -1022,10 +1038,12 @@ class MySqlAppTest(testtools.TestCase):
mock_execute.assert_called_with(mysql_service['cmd_enable'], mock_execute.assert_called_with(mysql_service['cmd_enable'],
shell=True) shell=True)
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
@patch.object(operating_system, 'service_discovery', @patch.object(operating_system, 'service_discovery',
side_effect=KeyError('error')) side_effect=KeyError('error'))
@patch.object(utils, 'execute_with_timeout') @patch.object(utils, 'execute_with_timeout')
def test_fail__enable_mysql_on_boot(self, mock_execute, mock_service): def test_fail__enable_mysql_on_boot(self, mock_execute, mock_service,
mock_logging):
self.assertRaisesRegexp(RuntimeError, 'Service is not discovered.', self.assertRaisesRegexp(RuntimeError, 'Service is not discovered.',
self.mySqlApp._enable_mysql_on_boot) self.mySqlApp._enable_mysql_on_boot)
self.assertEqual(0, mock_execute.call_count) self.assertEqual(0, mock_execute.call_count)
@ -1039,10 +1057,12 @@ class MySqlAppTest(testtools.TestCase):
mock_execute.assert_called_with(mysql_service['cmd_disable'], mock_execute.assert_called_with(mysql_service['cmd_disable'],
shell=True) shell=True)
@patch('trove.guestagent.datastore.mysql_common.service.LOG')
@patch.object(operating_system, 'service_discovery', @patch.object(operating_system, 'service_discovery',
side_effect=KeyError('error')) side_effect=KeyError('error'))
@patch.object(utils, 'execute_with_timeout') @patch.object(utils, 'execute_with_timeout')
def test_fail__disable_mysql_on_boot(self, mock_execute, mock_service): def test_fail__disable_mysql_on_boot(self, mock_execute, mock_service,
mock_logging):
self.assertRaisesRegexp(RuntimeError, 'Service is not discovered.', self.assertRaisesRegexp(RuntimeError, 'Service is not discovered.',
self.mySqlApp._disable_mysql_on_boot) self.mySqlApp._disable_mysql_on_boot)
self.assertEqual(0, mock_execute.call_count) self.assertEqual(0, mock_execute.call_count)
@ -1603,7 +1623,8 @@ class InterrogatorTest(testtools.TestCase):
self.assertEqual(2147483648, result['free']) self.assertEqual(2147483648, result['free'])
self.assertEqual(2.0, result['used']) self.assertEqual(2.0, result['used'])
def test_get_filesystem_volume_stats_error(self): @patch('trove.guestagent.dbaas.LOG')
def test_get_filesystem_volume_stats_error(self, *args):
with patch.object(os, 'statvfs', side_effect=OSError): with patch.object(os, 'statvfs', side_effect=OSError):
self.assertRaises( self.assertRaises(
RuntimeError, RuntimeError,
@ -2144,14 +2165,17 @@ class MySqlAppStatusTest(testtools.TestCase):
@patch.object(utils, 'execute_with_timeout', @patch.object(utils, 'execute_with_timeout',
side_effect=ProcessExecutionError()) side_effect=ProcessExecutionError())
@patch.object(os.path, 'exists', return_value=True) @patch.object(os.path, 'exists', return_value=True)
def test_get_actual_db_status_error_crashed(self, mock_exists, @patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_get_actual_db_status_error_crashed(self, mock_logging,
mock_exists,
mock_execute): mock_execute):
dbaas_base.load_mysqld_options = Mock(return_value={}) dbaas_base.load_mysqld_options = Mock(return_value={})
self.mySqlAppStatus = MySqlAppStatus.get() self.mySqlAppStatus = MySqlAppStatus.get()
status = self.mySqlAppStatus._get_actual_db_status() status = self.mySqlAppStatus._get_actual_db_status()
self.assertEqual(rd_instance.ServiceStatuses.CRASHED, status) self.assertEqual(rd_instance.ServiceStatuses.CRASHED, status)
def test_get_actual_db_status_error_shutdown(self): @patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_get_actual_db_status_error_shutdown(self, *args):
mocked = Mock(side_effect=ProcessExecutionError()) mocked = Mock(side_effect=ProcessExecutionError())
dbaas_base.utils.execute_with_timeout = mocked dbaas_base.utils.execute_with_timeout = mocked
@ -2163,7 +2187,8 @@ class MySqlAppStatusTest(testtools.TestCase):
self.assertEqual(rd_instance.ServiceStatuses.SHUTDOWN, status) self.assertEqual(rd_instance.ServiceStatuses.SHUTDOWN, status)
def test_get_actual_db_status_error_blocked(self): @patch('trove.guestagent.datastore.mysql_common.service.LOG')
def test_get_actual_db_status_error_blocked(self, *args):
dbaas_base.utils.execute_with_timeout = MagicMock( dbaas_base.utils.execute_with_timeout = MagicMock(
side_effect=[ProcessExecutionError(), ("some output", None)]) side_effect=[ProcessExecutionError(), ("some output", None)])
@ -2295,7 +2320,8 @@ class TestRedisApp(testtools.TestCase):
self.assertTrue( self.assertTrue(
mock_status.wait_for_real_status_to_change_to.called) mock_status.wait_for_real_status_to_change_to.called)
def test_stop_db_with_failure(self): @patch('trove.guestagent.datastore.experimental.redis.service.LOG')
def test_stop_db_with_failure(self, *args):
mock_status = MagicMock() mock_status = MagicMock()
mock_status.wait_for_real_status_to_change_to = MagicMock( mock_status.wait_for_real_status_to_change_to = MagicMock(
return_value=True) return_value=True)
@ -2336,8 +2362,9 @@ class TestRedisApp(testtools.TestCase):
self._assert_start_redis(mock_status) self._assert_start_redis(mock_status)
@patch('trove.guestagent.datastore.experimental.redis.service.LOG')
@patch.object(utils, 'execute_with_timeout') @patch.object(utils, 'execute_with_timeout')
def test_start_redis_with_failure(self, exec_mock): def test_start_redis_with_failure(self, exec_mock, mock_logging):
mock_status = MagicMock() mock_status = MagicMock()
mock_status.wait_for_real_status_to_change_to = MagicMock( mock_status.wait_for_real_status_to_change_to = MagicMock(
return_value=False) return_value=False)
@ -2419,7 +2446,9 @@ class CassandraDBAppTest(testtools.TestCase):
{'service_status': {'service_status':
rd_instance.ServiceStatuses.SHUTDOWN.description})) rd_instance.ServiceStatuses.SHUTDOWN.description}))
def test_stop_db_error(self): @patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
@patch('trove.guestagent.datastore.service.LOG')
def test_stop_db_error(self, *args):
cass_service.utils.execute_with_timeout = Mock() cass_service.utils.execute_with_timeout = Mock()
self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING) self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING)
@ -2448,7 +2477,8 @@ class CassandraDBAppTest(testtools.TestCase):
self.cassandra.start_db() self.cassandra.start_db()
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
def test_start_cassandra_runs_forever(self): @patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
def test_start_cassandra_runs_forever(self, *args):
cass_service.utils.execute_with_timeout = Mock() cass_service.utils.execute_with_timeout = Mock()
(self.cassandra.status. (self.cassandra.status.
@ -2474,7 +2504,9 @@ class CassandraDBAppTest(testtools.TestCase):
rd_instance.ServiceStatuses.RUNNING.description})) rd_instance.ServiceStatuses.RUNNING.description}))
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
def test_start_cassandra_error(self): @patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
@patch('trove.guestagent.datastore.service.LOG')
def test_start_cassandra_error(self, *args):
self.cassandra._enable_db_on_boot = Mock() self.cassandra._enable_db_on_boot = Mock()
self.cassandra.state_change_wait_time = 1 self.cassandra.state_change_wait_time = 1
cass_service.utils.execute_with_timeout = Mock( cass_service.utils.execute_with_timeout = Mock(
@ -2504,7 +2536,8 @@ class CassandraDBAppTest(testtools.TestCase):
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
def test_cassandra_error_in_write_config_verify_unlink(self): @patch('trove.guestagent.datastore.experimental.cassandra.service.LOG')
def test_cassandra_error_in_write_config_verify_unlink(self, *args):
# this test verifies not only that the write_config # this test verifies not only that the write_config
# method properly invoked execute, but also that it properly # method properly invoked execute, but also that it properly
# attempted to unlink the file (as a result of the exception) # attempted to unlink the file (as a result of the exception)
@ -2622,7 +2655,9 @@ class CouchbaseAppTest(testtools.TestCase):
self.couchbaseApp.stop_db() self.couchbaseApp.stop_db()
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
def test_stop_db_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.couchbase.service.LOG')
def test_stop_db_error(self, *args):
couchservice.utils.execute_with_timeout = Mock() couchservice.utils.execute_with_timeout = Mock()
self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING) self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING)
self.couchbaseApp.state_change_wait_time = 1 self.couchbaseApp.state_change_wait_time = 1
@ -2650,14 +2685,18 @@ class CouchbaseAppTest(testtools.TestCase):
self.couchbaseApp.start_db() self.couchbaseApp.start_db()
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
def test_start_db_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.couchbase.service.LOG')
def test_start_db_error(self, *args):
mocked = Mock(side_effect=ProcessExecutionError('Error')) mocked = Mock(side_effect=ProcessExecutionError('Error'))
couchservice.utils.execute_with_timeout = mocked couchservice.utils.execute_with_timeout = mocked
self.couchbaseApp._enable_db_on_boot = Mock() self.couchbaseApp._enable_db_on_boot = Mock()
self.assertRaises(RuntimeError, self.couchbaseApp.start_db) self.assertRaises(RuntimeError, self.couchbaseApp.start_db)
def test_start_db_runs_forever(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.couchbase.service.LOG')
def test_start_db_runs_forever(self, *args):
couchservice.utils.execute_with_timeout = Mock() couchservice.utils.execute_with_timeout = Mock()
self.couchbaseApp._enable_db_on_boot = Mock() self.couchbaseApp._enable_db_on_boot = Mock()
self.couchbaseApp.state_change_wait_time = 1 self.couchbaseApp.state_change_wait_time = 1
@ -2729,7 +2768,9 @@ class CouchDBAppTest(testtools.TestCase):
self.couchdbApp.stop_db() self.couchdbApp.stop_db()
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
def test_stop_db_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.couchdb.service.LOG')
def test_stop_db_error(self, *args):
couchdb_service.utils.execute_with_timeout = Mock() couchdb_service.utils.execute_with_timeout = Mock()
self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING) self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING)
self.couchdbApp.state_change_wait_time = 1 self.couchdbApp.state_change_wait_time = 1
@ -2757,7 +2798,9 @@ class CouchDBAppTest(testtools.TestCase):
self.couchdbApp.start_db() self.couchdbApp.start_db()
self.assert_reported_status(rd_instance.ServiceStatuses.NEW) self.assert_reported_status(rd_instance.ServiceStatuses.NEW)
def test_start_db_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.couchdb.service.LOG')
def test_start_db_error(self, *args):
couchdb_service.utils.execute_with_timeout = Mock( couchdb_service.utils.execute_with_timeout = Mock(
side_effect=ProcessExecutionError('Error')) side_effect=ProcessExecutionError('Error'))
self.couchdbApp._enable_db_on_boot = Mock() self.couchdbApp._enable_db_on_boot = Mock()
@ -2842,7 +2885,9 @@ class MongoDBAppTest(testtools.TestCase):
self.assertTrue(conductor_api.API.heartbeat.called_once_with( self.assertTrue(conductor_api.API.heartbeat.called_once_with(
self.FAKE_ID, {'service_status': 'shutdown'})) self.FAKE_ID, {'service_status': 'shutdown'}))
def test_stop_db_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.mongodb.service.LOG')
def test_stop_db_error(self, *args):
mongo_service.utils.execute_with_timeout = Mock() mongo_service.utils.execute_with_timeout = Mock()
self.mongoDbApp.status.set_next_status( self.mongoDbApp.status.set_next_status(
@ -2887,7 +2932,9 @@ class MongoDBAppTest(testtools.TestCase):
self.assertTrue(conductor_api.API.heartbeat.called_once_with( self.assertTrue(conductor_api.API.heartbeat.called_once_with(
self.FAKE_ID, {'service_status': 'running'})) self.FAKE_ID, {'service_status': 'running'}))
def test_start_db_runs_forever(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.mongodb.service.LOG')
def test_start_db_runs_forever(self, *args):
mongo_service.utils.execute_with_timeout = Mock( mongo_service.utils.execute_with_timeout = Mock(
return_value=["ubuntu 17036 0.0 0.1 618960 " return_value=["ubuntu 17036 0.0 0.1 618960 "
@ -2900,7 +2947,9 @@ class MongoDBAppTest(testtools.TestCase):
self.assertTrue(conductor_api.API.heartbeat.called_once_with( self.assertTrue(conductor_api.API.heartbeat.called_once_with(
self.FAKE_ID, {'service_status': 'shutdown'})) self.FAKE_ID, {'service_status': 'shutdown'}))
def test_start_db_error(self): @patch('trove.guestagent.datastore.service.LOG')
@patch('trove.guestagent.datastore.experimental.mongodb.service.LOG')
def test_start_db_error(self, *args):
self.mongoDbApp._enable_db_on_boot = Mock() self.mongoDbApp._enable_db_on_boot = Mock()
mocked = Mock(side_effect=ProcessExecutionError('Error')) mocked = Mock(side_effect=ProcessExecutionError('Error'))
@ -2964,7 +3013,8 @@ class VerticaAppStatusTest(testtools.TestCase):
status = self.verticaAppStatus._get_actual_db_status() status = self.verticaAppStatus._get_actual_db_status()
self.assertEqual(rd_instance.ServiceStatuses.SHUTDOWN, status) self.assertEqual(rd_instance.ServiceStatuses.SHUTDOWN, status)
def test_get_actual_db_status_error_crashed(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_get_actual_db_status_error_crashed(self, *args):
self.verticaAppStatus = VerticaAppStatus() self.verticaAppStatus = VerticaAppStatus()
with patch.object(vertica_system, 'shell_execute', with patch.object(vertica_system, 'shell_execute',
MagicMock(side_effect=ProcessExecutionError('problem' MagicMock(side_effect=ProcessExecutionError('problem'
@ -3033,7 +3083,8 @@ class VerticaAppTest(testtools.TestCase):
enable_user_arguments.assert_called_with( enable_user_arguments.assert_called_with(
'some_password', expected_enable_user_cmd) 'some_password', expected_enable_user_cmd)
def test_enable_root_is_root_not_enabled_failed(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_enable_root_is_root_not_enabled_failed(self, *args):
app = VerticaApp(MagicMock()) app = VerticaApp(MagicMock())
with patch.object(app, 'read_config', return_value=self.test_config): with patch.object(app, 'read_config', return_value=self.test_config):
with patch.object(app, 'is_root_enabled', return_value=False): with patch.object(app, 'is_root_enabled', return_value=False):
@ -3042,7 +3093,8 @@ class VerticaAppTest(testtools.TestCase):
self.assertRaises(RuntimeError, app.enable_root, self.assertRaises(RuntimeError, app.enable_root,
'root_password') 'root_password')
def test_enable_root_is_root_enabled(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_enable_root_is_root_enabled(self, *args):
app = VerticaApp(MagicMock()) app = VerticaApp(MagicMock())
with patch.object(app, 'read_config', return_value=self.test_config): with patch.object(app, 'read_config', return_value=self.test_config):
with patch.object(app, 'is_root_enabled', return_value=True): with patch.object(app, 'is_root_enabled', return_value=True):
@ -3058,7 +3110,8 @@ class VerticaAppTest(testtools.TestCase):
alter_user_password_arguments.assert_called_with( alter_user_password_arguments.assert_called_with(
'some_password', expected_alter_user_cmd) 'some_password', expected_alter_user_cmd)
def test_enable_root_is_root_enabled_failed(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_enable_root_is_root_enabled_failed(self, *arg):
app = VerticaApp(MagicMock()) app = VerticaApp(MagicMock())
with patch.object(app, 'read_config', return_value=self.test_config): with patch.object(app, 'read_config', return_value=self.test_config):
with patch.object(app, 'is_root_enabled', return_value=True): with patch.object(app, 'is_root_enabled', return_value=True):
@ -3081,7 +3134,8 @@ class VerticaAppTest(testtools.TestCase):
user_exists_args.assert_called_with(expected_user_exists_cmd, user_exists_args.assert_called_with(expected_user_exists_cmd,
'dbadmin') 'dbadmin')
def test_is_root_enable_failed(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_is_root_enable_failed(self, *args):
app = VerticaApp(MagicMock()) app = VerticaApp(MagicMock())
with patch.object(app, 'read_config', return_value=self.test_config): with patch.object(app, 'read_config', return_value=self.test_config):
with patch.object(vertica_system, 'shell_execute', with patch.object(vertica_system, 'shell_execute',
@ -3113,7 +3167,8 @@ class VerticaAppTest(testtools.TestCase):
" -m vertica.local_coerce") " -m vertica.local_coerce")
arguments.assert_called_with(expected_command) arguments.assert_called_with(expected_command)
def test_failure_prepare_for_install_vertica(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_failure_prepare_for_install_vertica(self, *args):
with patch.object(vertica_system, 'shell_execute', with patch.object(vertica_system, 'shell_execute',
side_effect=ProcessExecutionError('Error')): side_effect=ProcessExecutionError('Error')):
self.assertRaises(ProcessExecutionError, self.assertRaises(ProcessExecutionError,
@ -3128,7 +3183,8 @@ class VerticaAppTest(testtools.TestCase):
vertica_system.INSTALL_VERTICA % ('10.0.0.2', '/var/lib/vertica')) vertica_system.INSTALL_VERTICA % ('10.0.0.2', '/var/lib/vertica'))
arguments.assert_called_with(expected_command) arguments.assert_called_with(expected_command)
def test_failure_install_vertica(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_failure_install_vertica(self, *args):
with patch.object(vertica_system, 'shell_execute', with patch.object(vertica_system, 'shell_execute',
side_effect=ProcessExecutionError('some exception')): side_effect=ProcessExecutionError('some exception')):
self.assertRaisesRegexp(RuntimeError, 'install_vertica failed.', self.assertRaisesRegexp(RuntimeError, 'install_vertica failed.',
@ -3146,7 +3202,8 @@ class VerticaAppTest(testtools.TestCase):
'some_password')) 'some_password'))
arguments.assert_called_with(expected_command, 'dbadmin') arguments.assert_called_with(expected_command, 'dbadmin')
def test_failure_create_db(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_failure_create_db(self, *args):
with patch.object(self.app, 'read_config', with patch.object(self.app, 'read_config',
side_effect=RuntimeError('Error')): side_effect=RuntimeError('Error')):
self.assertRaisesRegexp(RuntimeError, self.assertRaisesRegexp(RuntimeError,
@ -3301,7 +3358,8 @@ class VerticaAppTest(testtools.TestCase):
self.assertEqual( self.assertEqual(
2, vertica_system.shell_execute.call_count) 2, vertica_system.shell_execute.call_count)
def test_stop_db_failure(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_stop_db_failure(self, *args):
mock_status = MagicMock() mock_status = MagicMock()
type(mock_status)._is_restarting = PropertyMock(return_value=False) type(mock_status)._is_restarting = PropertyMock(return_value=False)
app = VerticaApp(mock_status) app = VerticaApp(mock_status)
@ -3322,7 +3380,8 @@ class VerticaAppTest(testtools.TestCase):
self.app._export_conf_to_members(members=['member1', 'member2']) self.app._export_conf_to_members(members=['member1', 'member2'])
self.assertEqual(2, vertica_system.shell_execute.call_count) self.assertEqual(2, vertica_system.shell_execute.call_count)
def test_fail__export_conf_to_members(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_fail__export_conf_to_members(self, *args):
app = VerticaApp(MagicMock()) app = VerticaApp(MagicMock())
with patch.object(vertica_system, 'shell_execute', with patch.object(vertica_system, 'shell_execute',
side_effect=ProcessExecutionError('Error')): side_effect=ProcessExecutionError('Error')):
@ -3354,7 +3413,8 @@ class VerticaAppTest(testtools.TestCase):
vertica_system.shell_execute.assert_any_call( vertica_system.shell_execute.assert_any_call(
'cat ' + '/home/' + user + '/.ssh/authorized_keys') 'cat ' + '/home/' + user + '/.ssh/authorized_keys')
def test_fail_authorize_public_keys(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_fail_authorize_public_keys(self, *args):
user = 'test_user' user = 'test_user'
keys = ['test_key@machine1', 'test_key@machine2'] keys = ['test_key@machine1', 'test_key@machine2']
with patch.object(os.path, 'expanduser', with patch.object(os.path, 'expanduser',
@ -3390,7 +3450,8 @@ class VerticaAppTest(testtools.TestCase):
self.assertEqual(2, vertica_system.shell_execute.call_count) self.assertEqual(2, vertica_system.shell_execute.call_count)
self.assertEqual('some_key', key) self.assertEqual('some_key', key)
def test_fail_get_public_keys(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_fail_get_public_keys(self, *args):
user = 'test_user' user = 'test_user'
with patch.object(os.path, 'expanduser', with patch.object(os.path, 'expanduser',
return_value=('/home/' + user)): return_value=('/home/' + user)):
@ -3426,7 +3487,8 @@ class VerticaAppTest(testtools.TestCase):
restart_policy.assert_called_with(expected_restart_policy) restart_policy.assert_called_with(expected_restart_policy)
agent_enable.assert_called_with(expected_agent_enable) agent_enable.assert_called_with(expected_agent_enable)
def test_failure__enable_db_on_boot(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_failure__enable_db_on_boot(self, *args):
with patch.object(subprocess, 'Popen', side_effect=OSError): with patch.object(subprocess, 'Popen', side_effect=OSError):
self.assertRaisesRegexp(RuntimeError, self.assertRaisesRegexp(RuntimeError,
'Could not enable db on boot.', 'Could not enable db on boot.',
@ -3447,7 +3509,8 @@ class VerticaAppTest(testtools.TestCase):
restart_policy.assert_called_with(expected_restart_policy, 'dbadmin') restart_policy.assert_called_with(expected_restart_policy, 'dbadmin')
agent_disable.assert_called_with(expected_agent_disable, 'root') agent_disable.assert_called_with(expected_agent_disable, 'root')
def test_failure__disable_db_on_boot(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_failure__disable_db_on_boot(self, *args):
with patch.object(vertica_system, 'shell_execute', with patch.object(vertica_system, 'shell_execute',
side_effect=ProcessExecutionError('Error')): side_effect=ProcessExecutionError('Error')):
self.assertRaisesRegexp(RuntimeError, self.assertRaisesRegexp(RuntimeError,
@ -3463,7 +3526,8 @@ class VerticaAppTest(testtools.TestCase):
test_config.get('credentials', 'dbadmin_password') test_config.get('credentials', 'dbadmin_password')
) )
def test_fail_read_config(self): @patch('trove.guestagent.datastore.experimental.vertica.service.LOG')
def test_fail_read_config(self, *args):
with patch.object(ConfigParser.ConfigParser, 'read', with patch.object(ConfigParser.ConfigParser, 'read',
side_effect=ConfigParser.Error()): side_effect=ConfigParser.Error()):
self.assertRaises(RuntimeError, self.app.read_config) self.assertRaises(RuntimeError, self.app.read_config)
@ -3547,7 +3611,8 @@ class DB2AdminTest(testtools.TestCase):
db2service.utils.execute_with_timeout = ( db2service.utils.execute_with_timeout = (
self.orig_utils_execute_with_timeout) self.orig_utils_execute_with_timeout)
def test_delete_database(self): @patch('trove.guestagent.datastore.experimental.db2.service.LOG')
def test_delete_database(self, *args):
with patch.object( with patch.object(
db2service, 'run_command', db2service, 'run_command',
MagicMock( MagicMock(
@ -3562,7 +3627,8 @@ class DB2AdminTest(testtools.TestCase):
self.assertEqual(expected, args[0], self.assertEqual(expected, args[0],
"Delete database queries are not the same") "Delete database queries are not the same")
def test_list_databases(self): @patch('trove.guestagent.datastore.experimental.db2.service.LOG')
def test_list_databases(self, *args):
with patch.object(db2service, 'run_command', MagicMock( with patch.object(db2service, 'run_command', MagicMock(
side_effect=ProcessExecutionError('Error'))): side_effect=ProcessExecutionError('Error'))):
self.db2Admin.list_databases() self.db2Admin.list_databases()

View File

@ -364,7 +364,8 @@ class GuestAgentManagerTest(testtools.TestCase):
# assertions # assertions
self.assertEqual(1, mock_replication.enable_as_slave.call_count) self.assertEqual(1, mock_replication.enable_as_slave.call_count)
def test_attach_replication_slave_invalid(self): @patch('trove.guestagent.datastore.mysql_common.manager.LOG')
def test_attach_replication_slave_invalid(self, *args):
mock_status = MagicMock() mock_status = MagicMock()
dbaas.MySqlAppStatus.get = MagicMock(return_value=mock_status) dbaas.MySqlAppStatus.get = MagicMock(return_value=mock_status)
@ -666,7 +667,8 @@ class GuestAgentManagerTest(testtools.TestCase):
# assertions # assertions
self.assertEqual(mock_replication.enable_as_master.call_count, 1) self.assertEqual(mock_replication.enable_as_master.call_count, 1)
def test__perform_restore(self): @patch('trove.guestagent.datastore.mysql_common.manager.LOG')
def test__perform_restore(self, *args):
backup_info = {'id': 'backup_id_123abc', backup_info = {'id': 'backup_id_123abc',
'location': 'fake-location', 'location': 'fake-location',
'type': 'InnoBackupEx', 'type': 'InnoBackupEx',

View File

@ -301,7 +301,8 @@ class PkgRPMVersionTestCase(trove_testtools.TestCase):
super(PkgRPMVersionTestCase, self).tearDown() super(PkgRPMVersionTestCase, self).tearDown()
commands.getstatusoutput = self.commands_output commands.getstatusoutput = self.commands_output
def test_version_no_output(self): @patch('trove.guestagent.pkg.LOG')
def test_version_no_output(self, mock_logging):
cmd_out = '' cmd_out = ''
commands.getstatusoutput = Mock(return_value=(0, cmd_out)) commands.getstatusoutput = Mock(return_value=(0, cmd_out))
self.assertIsNone(pkg.RedhatPackagerMixin().pkg_version(self.pkgName)) self.assertIsNone(pkg.RedhatPackagerMixin().pkg_version(self.pkgName))

View File

@ -49,12 +49,14 @@ class ApiTest(trove_testtools.TestCase):
self.assertEqual('guestagent.instance-id-x23d2d', self.assertEqual('guestagent.instance-id-x23d2d',
self.api._get_routing_key()) self.api._get_routing_key())
def test_api_cast_exception(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_cast_exception(self, mock_logging):
self.call_context.cast.side_effect = IOError('host down') self.call_context.cast.side_effect = IOError('host down')
self.assertRaises(exception.GuestError, self.api.create_user, self.assertRaises(exception.GuestError, self.api.create_user,
'test_user') 'test_user')
def test_api_call_exception(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_call_exception(self, mock_logging):
self.call_context.call.side_effect = IOError('host_down') self.call_context.call.side_effect = IOError('host_down')
self.assertRaises(exception.GuestError, self.api.list_users) self.assertRaises(exception.GuestError, self.api.list_users)

View File

@ -49,12 +49,14 @@ class ApiTest(trove_testtools.TestCase):
self.assertEqual('guestagent.instance-id-x23d2d', self.assertEqual('guestagent.instance-id-x23d2d',
self.api._get_routing_key()) self.api._get_routing_key())
def test_api_cast_exception(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_cast_exception(self, mock_logging):
self.call_context.cast.side_effect = IOError('host down') self.call_context.cast.side_effect = IOError('host down')
self.assertRaises(exception.GuestError, self.api.create_user, self.assertRaises(exception.GuestError, self.api.create_user,
'test_user') 'test_user')
def test_api_call_exception(self): @mock.patch('trove.guestagent.api.LOG')
def test_api_call_exception(self, mock_logging):
self.call_context.call.side_effect = IOError('host_down') self.call_context.call.side_effect = IOError('host_down')
self.assertRaises(exception.GuestError, self.api.list_users) self.assertRaises(exception.GuestError, self.api.list_users)

View File

@ -170,7 +170,9 @@ class GuestAgentManagerTest(trove_testtools.TestCase):
@patch.object(VerticaAppStatus, 'set_status') @patch.object(VerticaAppStatus, 'set_status')
@patch.object(VerticaApp, 'install_cluster', @patch.object(VerticaApp, 'install_cluster',
side_effect=RuntimeError("Boom!")) side_effect=RuntimeError("Boom!"))
def test_install_cluster_failure(self, mock_install, mock_set_status): @patch('trove.guestagent.datastore.experimental.vertica.manager.LOG')
def test_install_cluster_failure(self, mock_logging,
mock_install, mock_set_status):
members = ["test1", "test2"] members = ["test1", "test2"]
self.assertRaises(RuntimeError, self.manager.install_cluster, self.assertRaises(RuntimeError, self.manager.install_cluster,
self.context, members) self.context, members)
@ -214,7 +216,9 @@ class GuestAgentManagerTest(trove_testtools.TestCase):
self.assertTrue(output) self.assertTrue(output)
@patch.object(VerticaAppStatus, 'set_status') @patch.object(VerticaAppStatus, 'set_status')
def test_prepare_invalid_cluster_config(self, mock_set_status): @patch('trove.guestagent.datastore.manager.LOG')
def test_prepare_invalid_cluster_config(self, mock_logging,
mock_set_status):
self.assertRaises(RuntimeError, self.assertRaises(RuntimeError,
self._prepare_method, self._prepare_method,
"test-instance-3", "query_router") "test-instance-3", "query_router")

View File

@ -64,7 +64,8 @@ class VolumeDeviceTest(trove_testtools.TestCase):
self.assertEqual(1, utils.execute.call_count) self.assertEqual(1, utils.execute.call_count)
utils.execute = origin_execute utils.execute = origin_execute
def test_fail__check_device_exists(self): @patch('trove.guestagent.volume.LOG')
def test_fail__check_device_exists(self, mock_logging):
with patch.object(utils, 'execute', side_effect=ProcessExecutionError): with patch.object(utils, 'execute', side_effect=ProcessExecutionError):
self.assertRaises(GuestError, self.assertRaises(GuestError,
self.volumeDevice._check_device_exists) self.volumeDevice._check_device_exists)
@ -142,7 +143,8 @@ class VolumeDeviceTest(trove_testtools.TestCase):
@patch.object(os.path, 'ismount', return_value=True) @patch.object(os.path, 'ismount', return_value=True)
@patch.object(utils, 'execute', side_effect=ProcessExecutionError) @patch.object(utils, 'execute', side_effect=ProcessExecutionError)
def test_fail_resize_fs(self, mock_execute, mock_mount): @patch('trove.guestagent.volume.LOG')
def test_fail_resize_fs(self, mock_logging, mock_execute, mock_mount):
with patch.object(self.volumeDevice, '_check_device_exists'): with patch.object(self.volumeDevice, '_check_device_exists'):
self.assertRaises(GuestError, self.assertRaises(GuestError,
self.volumeDevice.resize_fs, '/mnt/volume') self.volumeDevice.resize_fs, '/mnt/volume')
@ -175,7 +177,8 @@ class VolumeDeviceTest(trove_testtools.TestCase):
self.assertEqual(['/var/lib/mysql'], mount_point) self.assertEqual(['/var/lib/mysql'], mount_point)
@patch.object(utils, 'execute', side_effect=ProcessExecutionError) @patch.object(utils, 'execute', side_effect=ProcessExecutionError)
def test_fail_mount_points(self, mock_execute): @patch('trove.guestagent.volume.LOG')
def test_fail_mount_points(self, mock_logging, mock_execute):
self.assertRaises(GuestError, self.volumeDevice.mount_points, self.assertRaises(GuestError, self.volumeDevice.mount_points,
'/mnt/volume') '/mnt/volume')
@ -192,7 +195,8 @@ class VolumeDeviceTest(trove_testtools.TestCase):
readahead_size, "/dev/vdb") readahead_size, "/dev/vdb")
self.volumeDevice._check_device_exists = origin_check_device_exists self.volumeDevice._check_device_exists = origin_check_device_exists
def test_fail_set_readahead_size(self): @patch('trove.guestagent.volume.LOG')
def test_fail_set_readahead_size(self, mock_logging):
mock_execute = MagicMock(side_effect=ProcessExecutionError) mock_execute = MagicMock(side_effect=ProcessExecutionError)
readahead_size = 2048 readahead_size = 2048
with patch.object(self.volumeDevice, '_check_device_exists'): with patch.object(self.volumeDevice, '_check_device_exists'):

View File

@ -257,7 +257,8 @@ class TestReplication(trove_testtools.TestCase):
models.create_nova_client = self.safe_nova_client models.create_nova_client = self.safe_nova_client
super(TestReplication, self).tearDown() super(TestReplication, self).tearDown()
def test_replica_of_not_active_master(self): @patch('trove.instance.models.LOG')
def test_replica_of_not_active_master(self, mock_logging):
self.master.set_task_status(InstanceTasks.BUILDING) self.master.set_task_status(InstanceTasks.BUILDING)
self.master.save() self.master.save()
self.master_status.set_status(ServiceStatuses.BUILDING) self.master_status.set_status(ServiceStatuses.BUILDING)
@ -268,7 +269,8 @@ class TestReplication(trove_testtools.TestCase):
self.datastore_version, 1, self.datastore_version, 1,
None, slave_of_id=self.master.id) None, slave_of_id=self.master.id)
def test_replica_with_invalid_slave_of_id(self): @patch('trove.instance.models.LOG')
def test_replica_with_invalid_slave_of_id(self, mock_logging):
self.assertRaises(exception.NotFound, self.assertRaises(exception.NotFound,
Instance.create, Instance.create,
None, 'name', 1, "UUID", [], [], None, None, 'name', 1, "UUID", [], [], None,

View File

@ -121,7 +121,8 @@ class TestNotificationTransformer(MockMgmtInstanceTest):
def setUpClass(cls): def setUpClass(cls):
super(TestNotificationTransformer, cls).setUpClass() super(TestNotificationTransformer, cls).setUpClass()
def test_tranformer(self): @patch('trove.instance.models.LOG')
def test_transformer(self, mock_logging):
status = rd_instance.ServiceStatuses.BUILDING.api_status status = rd_instance.ServiceStatuses.BUILDING.api_status
instance, service_status = self.build_db_instance( instance, service_status = self.build_db_instance(
status, InstanceTasks.BUILDING) status, InstanceTasks.BUILDING)
@ -144,7 +145,8 @@ class TestNotificationTransformer(MockMgmtInstanceTest):
self.assertThat(transformer._get_service_id('mysql', id_map), self.assertThat(transformer._get_service_id('mysql', id_map),
Equals('123')) Equals('123'))
def test_get_service_id_unknown(self): @patch('trove.extensions.mgmt.instances.models.LOG')
def test_get_service_id_unknown(self, mock_logging):
id_map = { id_map = {
'mysql': '123', 'mysql': '123',
'percona': 'abc' 'percona': 'abc'
@ -182,7 +184,7 @@ class TestNovaNotificationTransformer(MockMgmtInstanceTest):
self.assertThat(transformer._lookup_flavor('2'), self.assertThat(transformer._lookup_flavor('2'),
Equals('unknown')) Equals('unknown'))
def test_tranformer(self): def test_transformer(self):
status = rd_instance.ServiceStatuses.BUILDING.api_status status = rd_instance.ServiceStatuses.BUILDING.api_status
instance, service_status = self.build_db_instance( instance, service_status = self.build_db_instance(
status, InstanceTasks.BUILDING) status, InstanceTasks.BUILDING)
@ -220,7 +222,8 @@ class TestNovaNotificationTransformer(MockMgmtInstanceTest):
self.assertThat(payload['service_id'], Equals('123')) self.assertThat(payload['service_id'], Equals('123'))
self.addCleanup(self.do_cleanup, instance, service_status) self.addCleanup(self.do_cleanup, instance, service_status)
def test_tranformer_invalid_datastore_manager(self): @patch('trove.extensions.mgmt.instances.models.LOG')
def test_transformer_invalid_datastore_manager(self, mock_logging):
status = rd_instance.ServiceStatuses.BUILDING.api_status status = rd_instance.ServiceStatuses.BUILDING.api_status
instance, service_status = self.build_db_instance( instance, service_status = self.build_db_instance(
status, InstanceTasks.BUILDING) status, InstanceTasks.BUILDING)
@ -265,7 +268,7 @@ class TestNovaNotificationTransformer(MockMgmtInstanceTest):
version.update(manager='mysql') version.update(manager='mysql')
self.addCleanup(self.do_cleanup, instance, service_status) self.addCleanup(self.do_cleanup, instance, service_status)
def test_tranformer_shutdown_instance(self): def test_transformer_shutdown_instance(self):
status = rd_instance.ServiceStatuses.SHUTDOWN.api_status status = rd_instance.ServiceStatuses.SHUTDOWN.api_status
instance, service_status = self.build_db_instance(status) instance, service_status = self.build_db_instance(status)
service_status.set_status(rd_instance.ServiceStatuses.SHUTDOWN) service_status.set_status(rd_instance.ServiceStatuses.SHUTDOWN)
@ -293,7 +296,7 @@ class TestNovaNotificationTransformer(MockMgmtInstanceTest):
for db in payloads]) for db in payloads])
self.addCleanup(self.do_cleanup, instance, service_status) self.addCleanup(self.do_cleanup, instance, service_status)
def test_tranformer_no_nova_instance(self): def test_transformer_no_nova_instance(self):
status = rd_instance.ServiceStatuses.SHUTDOWN.api_status status = rd_instance.ServiceStatuses.SHUTDOWN.api_status
instance, service_status = self.build_db_instance(status) instance, service_status = self.build_db_instance(status)
service_status.set_status(rd_instance.ServiceStatuses.SHUTDOWN) service_status.set_status(rd_instance.ServiceStatuses.SHUTDOWN)
@ -318,7 +321,7 @@ class TestNovaNotificationTransformer(MockMgmtInstanceTest):
for db in payloads]) for db in payloads])
self.addCleanup(self.do_cleanup, instance, service_status) self.addCleanup(self.do_cleanup, instance, service_status)
def test_tranformer_flavor_cache(self): def test_transformer_flavor_cache(self):
status = rd_instance.ServiceStatuses.BUILDING.api_status status = rd_instance.ServiceStatuses.BUILDING.api_status
instance, service_status = self.build_db_instance( instance, service_status = self.build_db_instance(
status, InstanceTasks.BUILDING) status, InstanceTasks.BUILDING)

View File

@ -15,7 +15,7 @@
# #
from mock import MagicMock from mock import MagicMock
from mock import Mock from mock import Mock, patch
from neutronclient.common import exceptions as neutron_exceptions from neutronclient.common import exceptions as neutron_exceptions
from neutronclient.v2_0 import client as NeutronClient from neutronclient.v2_0 import client as NeutronClient
@ -94,23 +94,27 @@ class NeutronDriverExceptionTest(trove_testtools.TestCase):
NeutronClient.Client = self.orig_NeutronClient NeutronClient.Client = self.orig_NeutronClient
remote.get_endpoint = self.orig_get_endpoint remote.get_endpoint = self.orig_get_endpoint
def test_create_sg_with_exception(self): @patch('trove.network.neutron.LOG')
def test_create_sg_with_exception(self, mock_logging):
self.assertRaises(exception.SecurityGroupCreationError, self.assertRaises(exception.SecurityGroupCreationError,
RemoteSecurityGroup.create, RemoteSecurityGroup.create,
"sg_name", "sg_desc", self.context) "sg_name", "sg_desc", self.context)
def test_add_sg_rule_with_exception(self): @patch('trove.network.neutron.LOG')
def test_add_sg_rule_with_exception(self, mock_logging):
self.assertRaises(exception.SecurityGroupRuleCreationError, self.assertRaises(exception.SecurityGroupRuleCreationError,
RemoteSecurityGroup.add_rule, RemoteSecurityGroup.add_rule,
"12234", "tcp", "22", "22", "12234", "tcp", "22", "22",
"0.0.0.0/8", self.context) "0.0.0.0/8", self.context)
def test_delete_sg_rule_with_exception(self): @patch('trove.network.neutron.LOG')
def test_delete_sg_rule_with_exception(self, mock_logging):
self.assertRaises(exception.SecurityGroupRuleDeletionError, self.assertRaises(exception.SecurityGroupRuleDeletionError,
RemoteSecurityGroup.delete_rule, RemoteSecurityGroup.delete_rule,
"12234", self.context) "12234", self.context)
def test_delete_sg_with_exception(self): @patch('trove.network.neutron.LOG')
def test_delete_sg_with_exception(self, mock_logging):
self.assertRaises(exception.SecurityGroupDeletionError, self.assertRaises(exception.SecurityGroupDeletionError,
RemoteSecurityGroup.delete, RemoteSecurityGroup.delete,
"123445", self.context) "123445", self.context)

View File

@ -61,24 +61,28 @@ class Security_Group_Exceptions_Test(trove_testtools.TestCase):
def _raise(self, ex): def _raise(self, ex):
raise ex raise ex
def test_failed_to_create_security_group(self): @patch('trove.network.nova.LOG')
def test_failed_to_create_security_group(self, mock_logging):
self.assertRaises(exception.SecurityGroupCreationError, self.assertRaises(exception.SecurityGroupCreationError,
sec_mod.RemoteSecurityGroup.create, sec_mod.RemoteSecurityGroup.create,
"TestName", "TestName",
"TestDescription", "TestDescription",
self.context) self.context)
def test_failed_to_delete_security_group(self): @patch('trove.network.nova.LOG')
def test_failed_to_delete_security_group(self, mock_logging):
self.assertRaises(exception.SecurityGroupDeletionError, self.assertRaises(exception.SecurityGroupDeletionError,
sec_mod.RemoteSecurityGroup.delete, sec_mod.RemoteSecurityGroup.delete,
1, self.context) 1, self.context)
def test_failed_to_create_security_group_rule(self): @patch('trove.network.nova.LOG')
def test_failed_to_create_security_group_rule(self, mock_logging):
self.assertRaises(exception.SecurityGroupRuleCreationError, self.assertRaises(exception.SecurityGroupRuleCreationError,
sec_mod.RemoteSecurityGroup.add_rule, sec_mod.RemoteSecurityGroup.add_rule,
1, "tcp", 3306, 3306, "0.0.0.0/0", self.context) 1, "tcp", 3306, 3306, "0.0.0.0/0", self.context)
def test_failed_to_delete_security_group_rule(self): @patch('trove.network.nova.LOG')
def test_failed_to_delete_security_group_rule(self, mock_logging):
self.assertRaises(exception.SecurityGroupRuleDeletionError, self.assertRaises(exception.SecurityGroupRuleDeletionError,
sec_mod.RemoteSecurityGroup.delete_rule, sec_mod.RemoteSecurityGroup.delete_rule,
1, self.context) 1, self.context)

View File

@ -89,7 +89,9 @@ class ApiTest(trove_testtools.TestCase):
mock_heartbeat.delete.assert_called_with() mock_heartbeat.delete.assert_called_with()
@patch.object(agent_models, 'AgentHeartBeat') @patch.object(agent_models, 'AgentHeartBeat')
def test_exception_delete_heartbeat(self, mock_agent_heart_beat): @patch('trove.taskmanager.api.LOG')
def test_exception_delete_heartbeat(self, mock_logging,
mock_agent_heart_beat):
mock_agent_heart_beat.return_value.find_by_instance_id.side_effect = ( mock_agent_heart_beat.return_value.find_by_instance_id.side_effect = (
exception.ModelNotFoundError) exception.ModelNotFoundError)
self.api._delete_heartbeat('some-cluster-id') self.api._delete_heartbeat('some-cluster-id')

View File

@ -96,7 +96,8 @@ class MongoDbClusterTasksTest(trove_testtools.TestCase):
@patch.object(ClusterTasks, 'update_statuses_on_failure') @patch.object(ClusterTasks, 'update_statuses_on_failure')
@patch.object(InstanceServiceStatus, 'find_by') @patch.object(InstanceServiceStatus, 'find_by')
def test_all_instances_ready_bad_status(self, @patch('trove.taskmanager.models.LOG')
def test_all_instances_ready_bad_status(self, mock_logging,
mock_find, mock_update): mock_find, mock_update):
(mock_find.return_value. (mock_find.return_value.
get_status.return_value) = ServiceStatuses.FAILED get_status.return_value) = ServiceStatuses.FAILED
@ -118,7 +119,9 @@ class MongoDbClusterTasksTest(trove_testtools.TestCase):
@patch.object(ClusterTasks, 'get_ip') @patch.object(ClusterTasks, 'get_ip')
@patch.object(datastore_models.Datastore, 'load') @patch.object(datastore_models.Datastore, 'load')
@patch.object(datastore_models.DatastoreVersion, 'load_by_uuid') @patch.object(datastore_models.DatastoreVersion, 'load_by_uuid')
def test_init_replica_set_failure(self, mock_dv, mock_ds, @patch(
'trove.common.strategies.cluster.experimental.mongodb.taskmanager.LOG')
def test_init_replica_set_failure(self, mock_logging, mock_dv, mock_ds,
mock_ip, mock_guest, mock_ip, mock_guest,
mock_update): mock_update):
member1 = BaseInstance(Mock(), self.dbinst1, Mock(), member1 = BaseInstance(Mock(), self.dbinst1, Mock(),
@ -169,8 +172,11 @@ class MongoDbClusterTasksTest(trove_testtools.TestCase):
@patch.object(ClusterTasks, 'get_ip') @patch.object(ClusterTasks, 'get_ip')
@patch.object(datastore_models.Datastore, 'load') @patch.object(datastore_models.Datastore, 'load')
@patch.object(datastore_models.DatastoreVersion, 'load_by_uuid') @patch.object(datastore_models.DatastoreVersion, 'load_by_uuid')
def test_create_shard_failure(self, mock_dv, mock_ds, mock_ip, @patch(
mock_guest, mock_init_rs, mock_update): 'trove.common.strategies.cluster.experimental.mongodb.taskmanager.LOG')
def test_create_shard_failure(self, mock_logging, mock_dv, mock_ds,
mock_ip, mock_guest, mock_init_rs,
mock_update):
member1 = BaseInstance(Mock(), self.dbinst1, Mock(), member1 = BaseInstance(Mock(), self.dbinst1, Mock(),
InstanceServiceStatus(ServiceStatuses.NEW)) InstanceServiceStatus(ServiceStatuses.NEW))
member2 = BaseInstance(Mock(), self.dbinst2, Mock(), member2 = BaseInstance(Mock(), self.dbinst2, Mock(),
@ -320,12 +326,11 @@ class MongoDbClusterTasksTest(trove_testtools.TestCase):
@patch.object(ClusterTasks, 'get_cluster_admin_password') @patch.object(ClusterTasks, 'get_cluster_admin_password')
@patch.object(datastore_models.Datastore, 'load') @patch.object(datastore_models.Datastore, 'load')
@patch.object(datastore_models.DatastoreVersion, 'load_by_uuid') @patch.object(datastore_models.DatastoreVersion, 'load_by_uuid')
@patch(
'trove.common.strategies.cluster.experimental.mongodb.taskmanager.LOG')
def test_add_query_routers_failure(self, def test_add_query_routers_failure(self,
mock_dv, mock_logging, mock_dv, mock_ds,
mock_ds, mock_password, mock_guest, mock_update):
mock_password,
mock_guest,
mock_update):
query_router = BaseInstance( query_router = BaseInstance(
Mock(), self.dbinst3, Mock(), Mock(), self.dbinst3, Mock(),
InstanceServiceStatus(ServiceStatuses.NEW) InstanceServiceStatus(ServiceStatuses.NEW)

View File

@ -125,6 +125,7 @@ class TestManager(trove_testtools.TestCase):
InstanceTasks.NONE) InstanceTasks.NONE)
@patch.object(Manager, '_set_task_status') @patch.object(Manager, '_set_task_status')
@patch('trove.taskmanager.manager.LOG')
def test_exception_TroveError_promote_to_replica_source(self, *args): def test_exception_TroveError_promote_to_replica_source(self, *args):
self.mock_slave2.detach_replica = Mock(side_effect=TroveError) self.mock_slave2.detach_replica = Mock(side_effect=TroveError)
with patch.object(models.BuiltInstanceTasks, 'load', with patch.object(models.BuiltInstanceTasks, 'load',
@ -136,8 +137,10 @@ class TestManager(trove_testtools.TestCase):
@patch.object(Manager, '_set_task_status') @patch.object(Manager, '_set_task_status')
@patch.object(Manager, '_most_current_replica') @patch.object(Manager, '_most_current_replica')
@patch('trove.taskmanager.manager.LOG')
def test_exception_TroveError_eject_replica_source( def test_exception_TroveError_eject_replica_source(
self, mock_most_current_replica, mock_set_tast_status): self, mock_logging, mock_most_current_replica,
mock_set_tast_status):
self.mock_slave2.detach_replica = Mock(side_effect=TroveError) self.mock_slave2.detach_replica = Mock(side_effect=TroveError)
mock_most_current_replica.return_value = self.mock_slave1 mock_most_current_replica.return_value = self.mock_slave1
with patch.object(models.BuiltInstanceTasks, 'load', with patch.object(models.BuiltInstanceTasks, 'load',
@ -159,7 +162,9 @@ class TestManager(trove_testtools.TestCase):
self.manager.promote_to_replica_source, self.manager.promote_to_replica_source,
self.context, 'some-inst-id') self.context, 'some-inst-id')
def test_error_demote_replication_master_promote_to_replica_source(self): @patch('trove.taskmanager.manager.LOG')
def test_error_demote_replication_master_promote_to_replica_source(
self, mock_logging):
self.mock_old_master.demote_replication_master = Mock( self.mock_old_master.demote_replication_master = Mock(
side_effect=RuntimeError('Error')) side_effect=RuntimeError('Error'))
@ -206,7 +211,9 @@ class TestManager(trove_testtools.TestCase):
@patch.object(models.FreshInstanceTasks, 'load') @patch.object(models.FreshInstanceTasks, 'load')
@patch.object(Backup, 'delete') @patch.object(Backup, 'delete')
def test_exception_create_replication_slave(self, mock_delete, mock_load): @patch('trove.taskmanager.manager.LOG')
def test_exception_create_replication_slave(self, mock_logging,
mock_delete, mock_load):
mock_load.return_value.create_instance = Mock(side_effect=TroveError) mock_load.return_value.create_instance = Mock(side_effect=TroveError)
self.assertRaises(TroveError, self.manager.create_instance, self.assertRaises(TroveError, self.manager.create_instance,
self.context, ['id1', 'id2'], Mock(), Mock(), self.context, ['id1', 'id2'], Mock(), Mock(),

View File

@ -310,8 +310,9 @@ class FreshInstanceTasksTest(trove_testtools.TestCase):
return_value=fake_InstanceServiceStatus.find_by()) return_value=fake_InstanceServiceStatus.find_by())
@patch.object(DBInstance, 'find_by', @patch.object(DBInstance, 'find_by',
return_value=fake_DBInstance.find_by()) return_value=fake_DBInstance.find_by())
@patch('trove.taskmanager.models.LOG')
def test_update_status_of_instance_failure( def test_update_status_of_instance_failure(
self, dbi_find_by_mock, iss_find_by_mock): self, mock_logging, dbi_find_by_mock, iss_find_by_mock):
self.task_models_conf_mock.get.return_value = '' self.task_models_conf_mock.get.return_value = ''
self.freshinstancetasks.update_statuses_on_time_out() self.freshinstancetasks.update_statuses_on_time_out()
self.assertEqual(ServiceStatuses.FAILED_TIMEOUT_GUESTAGENT, self.assertEqual(ServiceStatuses.FAILED_TIMEOUT_GUESTAGENT,
@ -365,7 +366,9 @@ class FreshInstanceTasksTest(trove_testtools.TestCase):
@patch.object(BaseInstance, 'update_db') @patch.object(BaseInstance, 'update_db')
@patch('trove.taskmanager.models.CONF') @patch('trove.taskmanager.models.CONF')
def test_error_sec_group_create_instance(self, mock_conf, mock_update_db): @patch('trove.taskmanager.models.LOG')
def test_error_sec_group_create_instance(self, mock_logging,
mock_conf, mock_update_db):
mock_conf.get = Mock( mock_conf.get = Mock(
return_value=FakeOptGroup(tcp_ports=['3306', '-3306'])) return_value=FakeOptGroup(tcp_ports=['3306', '-3306']))
mock_flavor = {'id': 7, 'ram': 256, 'name': 'smaller_flavor'} mock_flavor = {'id': 7, 'ram': 256, 'name': 'smaller_flavor'}
@ -388,6 +391,7 @@ class FreshInstanceTasksTest(trove_testtools.TestCase):
@patch.object(template, 'OverrideConfigTemplate') @patch.object(template, 'OverrideConfigTemplate')
@patch.object(taskmanager_models.FreshInstanceTasks, '_create_dns_entry', @patch.object(taskmanager_models.FreshInstanceTasks, '_create_dns_entry',
side_effect=TroveError) side_effect=TroveError)
@patch('trove.taskmanager.models.LOG')
def test_error_create_dns_entry_create_instance(self, *args): def test_error_create_dns_entry_create_instance(self, *args):
mock_flavor = {'id': 6, 'ram': 512, 'name': 'big_flavor'} mock_flavor = {'id': 6, 'ram': 512, 'name': 'big_flavor'}
self.assertRaisesRegexp( self.assertRaisesRegexp(
@ -451,6 +455,7 @@ class FreshInstanceTasksTest(trove_testtools.TestCase):
'_render_replica_config') '_render_replica_config')
@patch.object(trove.guestagent.api.API, 'attach_replication_slave', @patch.object(trove.guestagent.api.API, 'attach_replication_slave',
side_effect=GuestError) side_effect=GuestError)
@patch('trove.taskmanager.models.LOG')
def test_error_attach_replication_slave(self, *args): def test_error_attach_replication_slave(self, *args):
mock_flavor = {'id': 8, 'ram': 768, 'name': 'bigger_flavor'} mock_flavor = {'id': 8, 'ram': 768, 'name': 'bigger_flavor'}
snapshot = {'replication_strategy': 'MysqlGTIDReplication', snapshot = {'replication_strategy': 'MysqlGTIDReplication',
@ -491,7 +496,8 @@ class ResizeVolumeTest(trove_testtools.TestCase):
def tearDown(self): def tearDown(self):
super(ResizeVolumeTest, self).tearDown() super(ResizeVolumeTest, self).tearDown()
def test_resize_volume_unmount_exception(self): @patch('trove.taskmanager.models.LOG')
def test_resize_volume_unmount_exception(self, mock_logging):
self.instance.guest.unmount_volume = Mock( self.instance.guest.unmount_volume = Mock(
side_effect=GuestError("test exception")) side_effect=GuestError("test exception"))
self.assertRaises(GuestError, self.assertRaises(GuestError,
@ -501,7 +507,8 @@ class ResizeVolumeTest(trove_testtools.TestCase):
self.instance.guest.unmount_volume.side_effect = None self.instance.guest.unmount_volume.side_effect = None
self.instance.reset_mock() self.instance.reset_mock()
def test_resize_volume_detach_exception(self): @patch('trove.taskmanager.models.LOG')
def test_resize_volume_detach_exception(self, mock_logging):
self.instance.nova_client.volumes.delete_server_volume = Mock( self.instance.nova_client.volumes.delete_server_volume = Mock(
side_effect=nova_exceptions.ClientException("test exception")) side_effect=nova_exceptions.ClientException("test exception"))
self.assertRaises(nova_exceptions.ClientException, self.assertRaises(nova_exceptions.ClientException,
@ -513,7 +520,8 @@ class ResizeVolumeTest(trove_testtools.TestCase):
None) None)
self.instance.reset_mock() self.instance.reset_mock()
def test_resize_volume_extend_exception(self): @patch('trove.taskmanager.models.LOG')
def test_resize_volume_extend_exception(self, mock_logging):
self.instance.volume_client.volumes.extend = Mock( self.instance.volume_client.volumes.extend = Mock(
side_effect=cinder_exceptions.ClientException("test exception")) side_effect=cinder_exceptions.ClientException("test exception"))
self.assertRaises(cinder_exceptions.ClientException, self.assertRaises(cinder_exceptions.ClientException,
@ -527,14 +535,16 @@ class ResizeVolumeTest(trove_testtools.TestCase):
self.instance.volume_client.volumes.extend.side_effect = None self.instance.volume_client.volumes.extend.side_effect = None
self.instance.reset_mock() self.instance.reset_mock()
def test_resize_volume_verify_extend_no_volume(self): @patch('trove.taskmanager.models.LOG')
def test_resize_volume_verify_extend_no_volume(self, mock_logging):
self.instance.volume_client.volumes.get = Mock( self.instance.volume_client.volumes.get = Mock(
return_value=None) return_value=None)
self.assertRaises(cinder_exceptions.ClientException, self.assertRaises(cinder_exceptions.ClientException,
self.action._verify_extend) self.action._verify_extend)
self.instance.reset_mock() self.instance.reset_mock()
def test_resize_volume_poll_timeout(self): @patch('trove.taskmanager.models.LOG')
def test_resize_volume_poll_timeout(self, mock_logging):
utils.poll_until = Mock(side_effect=PollTimeOut) utils.poll_until = Mock(side_effect=PollTimeOut)
self.assertRaises(PollTimeOut, self.action._verify_extend) self.assertRaises(PollTimeOut, self.action._verify_extend)
self.assertEqual(2, self.instance.volume_client.volumes.get.call_count) self.assertEqual(2, self.instance.volume_client.volumes.get.call_count)
@ -718,7 +728,8 @@ class BuiltInstanceTasksTest(trove_testtools.TestCase):
self.assertEqual(1, self.stub_server_mgr.get.call_count) self.assertEqual(1, self.stub_server_mgr.get.call_count)
self.assertThat(self.db_instance.flavor_id, Is(self.new_flavor['id'])) self.assertThat(self.db_instance.flavor_id, Is(self.new_flavor['id']))
def test_resize_flavor_resize_failure(self): @patch('trove.taskmanager.models.LOG')
def test_resize_flavor_resize_failure(self, mock_logging):
orig_server = self.instance_task.server orig_server = self.instance_task.server
self.stub_verifying_server.status = 'ERROR' self.stub_verifying_server.status = 'ERROR'
with patch.object(self.instance_task._nova_client.servers, 'get', with patch.object(self.instance_task._nova_client.servers, 'get',
@ -750,7 +761,8 @@ class BuiltInstanceTasksTest(trove_testtools.TestCase):
self.instance_task.set_datastore_status_to_paused.assert_any_call() self.instance_task.set_datastore_status_to_paused.assert_any_call()
@patch.object(utils, 'poll_until') @patch.object(utils, 'poll_until')
def test_reboot_datastore_not_ready(self, mock_poll): @patch('trove.taskmanager.models.LOG')
def test_reboot_datastore_not_ready(self, mock_logging, mock_poll):
self.instance_task.datastore_status_matches = Mock(return_value=False) self.instance_task.datastore_status_matches = Mock(return_value=False)
self.instance_task._refresh_datastore_status = Mock() self.instance_task._refresh_datastore_status = Mock()
self.instance_task.server.reboot = Mock() self.instance_task.server.reboot = Mock()
@ -767,7 +779,8 @@ class BuiltInstanceTasksTest(trove_testtools.TestCase):
self.instance_task._guest.detach_replica.assert_called_with(True) self.instance_task._guest.detach_replica.assert_called_with(True)
mock_update_db.assert_called_with(slave_of_id=None) mock_update_db.assert_called_with(slave_of_id=None)
def test_error_detach_replica(self): @patch('trove.taskmanager.models.LOG')
def test_error_detach_replica(self, mock_logging):
with patch.object(self.instance_task._guest, 'detach_replica', with patch.object(self.instance_task._guest, 'detach_replica',
side_effect=GuestError): side_effect=GuestError):
self.assertRaises(GuestError, self.instance_task.detach_replica, self.assertRaises(GuestError, self.instance_task.detach_replica,
@ -799,7 +812,8 @@ class BuiltInstanceTasksTest(trove_testtools.TestCase):
replica_context, config_content) replica_context, config_content)
mock_update_db.assert_called_with(slave_of_id=master.id) mock_update_db.assert_called_with(slave_of_id=master.id)
def test_error_attach_replica(self): @patch('trove.taskmanager.models.LOG')
def test_error_attach_replica(self, mock_logging):
with patch.object(self.instance_task._guest, 'attach_replica', with patch.object(self.instance_task._guest, 'attach_replica',
side_effect=GuestError): side_effect=GuestError):
self.assertRaises(GuestError, self.instance_task.attach_replica, self.assertRaises(GuestError, self.instance_task.attach_replica,
@ -913,7 +927,8 @@ class BackupTasksTest(trove_testtools.TestCase):
self.backup.id) self.backup.id)
self.backup.delete.assert_any_call() self.backup.delete.assert_any_call()
def test_delete_backup_fail_delete_manifest(self): @patch('trove.taskmanager.models.LOG')
def test_delete_backup_fail_delete_manifest(self, mock_logging):
with patch.object(self.swift_client, 'delete_object', with patch.object(self.swift_client, 'delete_object',
side_effect=ClientException("foo")): side_effect=ClientException("foo")):
with patch.object(self.swift_client, 'head_object', with patch.object(self.swift_client, 'head_object',
@ -928,7 +943,8 @@ class BackupTasksTest(trove_testtools.TestCase):
self.backup.state, self.backup.state,
"backup should be in DELETE_FAILED status") "backup should be in DELETE_FAILED status")
def test_delete_backup_fail_delete_segment(self): @patch('trove.taskmanager.models.LOG')
def test_delete_backup_fail_delete_segment(self, mock_logging):
with patch.object(self.swift_client, 'delete_object', with patch.object(self.swift_client, 'delete_object',
side_effect=ClientException("foo")): side_effect=ClientException("foo")):
self.assertRaises( self.assertRaises(
@ -975,7 +991,8 @@ class NotifyMixinTest(trove_testtools.TestCase):
mixin = taskmanager_models.NotifyMixin() mixin = taskmanager_models.NotifyMixin()
self.assertThat(mixin._get_service_id('mysql', id_map), Equals('123')) self.assertThat(mixin._get_service_id('mysql', id_map), Equals('123'))
def test_get_service_id_unknown(self): @patch('trove.taskmanager.models.LOG')
def test_get_service_id_unknown(self, mock_logging):
id_map = { id_map = {
'mysql': '123', 'mysql': '123',
'percona': 'abc' 'percona': 'abc'

View File

@ -85,7 +85,8 @@ class PXCClusterTasksTest(trove_testtools.TestCase):
@patch.object(ClusterTasks, 'update_statuses_on_failure') @patch.object(ClusterTasks, 'update_statuses_on_failure')
@patch.object(InstanceServiceStatus, 'find_by') @patch.object(InstanceServiceStatus, 'find_by')
def test_all_instances_ready_bad_status(self, @patch('trove.taskmanager.models.LOG')
def test_all_instances_ready_bad_status(self, mock_logging,
mock_find, mock_update): mock_find, mock_update):
(mock_find.return_value. (mock_find.return_value.
get_status.return_value) = ServiceStatuses.FAILED get_status.return_value) = ServiceStatuses.FAILED
@ -127,8 +128,9 @@ class PXCClusterTasksTest(trove_testtools.TestCase):
@patch.object(DBInstance, 'find_all') @patch.object(DBInstance, 'find_all')
@patch.object(datastore_models.Datastore, 'load') @patch.object(datastore_models.Datastore, 'load')
@patch.object(datastore_models.DatastoreVersion, 'load_by_uuid') @patch.object(datastore_models.DatastoreVersion, 'load_by_uuid')
def test_create_cluster_fail(self, mock_dv, mock_ds, mock_find_all, @patch('trove.common.strategies.cluster.experimental.pxc.taskmanager.LOG')
mock_load, mock_ready, mock_ip, def test_create_cluster_fail(self, mock_logging, mock_dv, mock_ds,
mock_find_all, mock_load, mock_ready, mock_ip,
mock_reset_task, mock_update_status): mock_reset_task, mock_update_status):
mock_find_all.return_value.all.return_value = [self.dbinst1] mock_find_all.return_value.all.return_value = [self.dbinst1]
mock_load.return_value = BaseInstance(Mock(), mock_load.return_value = BaseInstance(Mock(),

View File

@ -87,7 +87,8 @@ class VerticaClusterTasksTest(trove_testtools.TestCase):
@patch.object(ClusterTasks, 'update_statuses_on_failure') @patch.object(ClusterTasks, 'update_statuses_on_failure')
@patch.object(InstanceServiceStatus, 'find_by') @patch.object(InstanceServiceStatus, 'find_by')
def test_all_instances_ready_bad_status(self, @patch('trove.taskmanager.models.LOG')
def test_all_instances_ready_bad_status(self, mock_logging,
mock_find, mock_update): mock_find, mock_update):
(mock_find.return_value. (mock_find.return_value.
get_status.return_value) = ServiceStatuses.FAILED get_status.return_value) = ServiceStatuses.FAILED
@ -151,7 +152,10 @@ class VerticaClusterTasksTest(trove_testtools.TestCase):
@patch.object(DBInstance, 'find_all') @patch.object(DBInstance, 'find_all')
@patch.object(datastore_models.Datastore, 'load') @patch.object(datastore_models.Datastore, 'load')
@patch.object(datastore_models.DatastoreVersion, 'load_by_uuid') @patch.object(datastore_models.DatastoreVersion, 'load_by_uuid')
def test_create_cluster_fail(self, mock_dv, mock_ds, mock_find_all, @patch(
'trove.common.strategies.cluster.experimental.vertica.taskmanager.LOG')
def test_create_cluster_fail(self, mock_logging, mock_dv, mock_ds,
mock_find_all,
mock_load, mock_ready, mock_ip, mock_load, mock_ready, mock_ip,
mock_reset_task, mock_update_status): mock_reset_task, mock_update_status):
mock_find_all.return_value.all.return_value = [self.dbinst1] mock_find_all.return_value.all.return_value = [self.dbinst1]

View File

@ -19,6 +19,8 @@ import os
import sys import sys
import testtools import testtools
from trove.tests import root_logger
class TestCase(testtools.TestCase): class TestCase(testtools.TestCase):
"""Base class of Trove unit tests. """Base class of Trove unit tests.
@ -42,6 +44,7 @@ class TestCase(testtools.TestCase):
'TROVE_TESTS_UNMOCK_ONLY_UNIQUE', True)) 'TROVE_TESTS_UNMOCK_ONLY_UNIQUE', True))
cls._dangling_mocks = set() cls._dangling_mocks = set()
root_logger.DefaultRootLogger()
@classmethod @classmethod
def is_bool(cls, val): def is_bool(cls, val):
@ -55,6 +58,14 @@ class TestCase(testtools.TestCase):
super(TestCase, self).setUp() super(TestCase, self).setUp()
self.addCleanup(self._assert_modules_unmocked) self.addCleanup(self._assert_modules_unmocked)
self._mocks_before = self._find_mock_refs() self._mocks_before = self._find_mock_refs()
root_logger.DefaultRootHandler.set_info(self.id())
def tearDown(self):
# yes, this is gross and not thread aware.
# but the only way to make it thread aware would require that
# we single thread all testing
root_logger.DefaultRootHandler.set_info(info=None)
super(TestCase, self).tearDown()
def _assert_modules_unmocked(self): def _assert_modules_unmocked(self):
"""Check that all members of loaded modules are currently unmocked. """Check that all members of loaded modules are currently unmocked.