PYTHON-260 added test for additional logging

This commit is contained in:
GregBestland
2016-03-25 13:28:47 -05:00
parent f4f3dc0972
commit 340479fb64
2 changed files with 81 additions and 3 deletions

View File

@@ -484,6 +484,26 @@ class BasicKeyspaceUnitTestCase(unittest.TestCase):
execute_until_pass(self.session, ddl) execute_until_pass(self.session, ddl)
class MockLoggingHandler(logging.Handler):
"""Mock logging handler to check for expected logs."""
def __init__(self, *args, **kwargs):
self.reset()
logging.Handler.__init__(self, *args, **kwargs)
def emit(self, record):
self.messages[record.levelname.lower()].append(record.getMessage())
def reset(self):
self.messages = {
'debug': [],
'info': [],
'warning': [],
'error': [],
'critical': [],
}
class BasicExistingKeyspaceUnitTestCase(BasicKeyspaceUnitTestCase): class BasicExistingKeyspaceUnitTestCase(BasicKeyspaceUnitTestCase):
""" """
This is basic unit test defines class level teardown and setup methods. It assumes that keyspace is already defined, or created as part of the test. This is basic unit test defines class level teardown and setup methods. It assumes that keyspace is already defined, or created as part of the test.

View File

@@ -17,17 +17,19 @@ except ImportError:
import unittest # noqa import unittest # noqa
import mock import mock
import logging
from cassandra.cqlengine.connection import get_session, get_cluster from cassandra.cqlengine.connection import get_session, get_cluster
from cassandra.cqlengine import CQLEngineException from cassandra.cqlengine import CQLEngineException
from cassandra.cqlengine import management from cassandra.cqlengine import management
from cassandra.cqlengine.management import _get_non_pk_field_names, _get_table_metadata, sync_table, drop_table from cassandra.cqlengine.management import _get_non_pk_field_names, _get_table_metadata, sync_table, drop_table, sync_type
from cassandra.cqlengine.models import Model from cassandra.cqlengine.models import Model
from cassandra.cqlengine import columns from cassandra.cqlengine import columns
from tests.integration import PROTOCOL_VERSION, greaterthancass20 from tests.integration import PROTOCOL_VERSION, greaterthancass20, MockLoggingHandler
from tests.integration.cqlengine.base import BaseCassEngTestCase from tests.integration.cqlengine.base import BaseCassEngTestCase
from tests.integration.cqlengine.query.test_queryset import TestModel from tests.integration.cqlengine.query.test_queryset import TestModel
from cassandra.cqlengine.usertype import UserType
from tests.integration.cqlengine import DEFAULT_KEYSPACE
class KeyspaceManagementTest(BaseCassEngTestCase): class KeyspaceManagementTest(BaseCassEngTestCase):
@@ -248,6 +250,62 @@ class IndexCaseSensitiveModel(Model):
second_key = columns.Text(index=True) second_key = columns.Text(index=True)
class BaseInconsistent(Model):
__table_name__ = 'inconsistent'
first_key = columns.UUID(primary_key=True)
second_key = columns.Integer(index=True)
third_key = columns.Integer(index=True)
class ChangedInconsistent(Model):
__table_name__ = 'inconsistent'
__table_name_case_sensitive__ = True
first_key = columns.UUID(primary_key=True)
second_key = columns.Text(index=True)
class BaseInconsistentType(UserType):
__type_name__ = 'type_inconsistent'
age = columns.Integer()
name = columns.Text()
class ChangedInconsistentType(UserType):
__type_name__ = 'type_inconsistent'
age = columns.Integer()
name = columns.Integer()
class InconsistentTable(BaseCassEngTestCase):
def setUp(self):
drop_table(IndexModel)
def test_sync_warnings(self):
"""
Test to insure when inconsistent changes are made to a table, or type as part of a sync call that the proper logging messages are surfaced
@since 3.2
@jira_ticket PYTHON-260
@expected_result warnings are logged
@test_category object_mapper
"""
mock_handler = MockLoggingHandler()
logger = logging.getLogger(management.__name__)
logger.addHandler(mock_handler)
sync_table(BaseInconsistent)
sync_table(ChangedInconsistent)
self.assertTrue('differing from the model type' in mock_handler.messages.get('warning')[0])
sync_type(DEFAULT_KEYSPACE, BaseInconsistentType)
mock_handler.reset()
sync_type(DEFAULT_KEYSPACE, ChangedInconsistentType)
self.assertTrue('differing from the model user type' in mock_handler.messages.get('warning')[0])
logger.removeHandler(mock_handler)
class IndexTests(BaseCassEngTestCase): class IndexTests(BaseCassEngTestCase):
def setUp(self): def setUp(self):