Start using CCM for integration tests

This commit is contained in:
Tyler Hobbs
2013-07-03 18:12:57 -05:00
parent 4058b654b5
commit bb3d3baeb6
4 changed files with 65 additions and 42 deletions

1
.gitignore vendored
View File

@@ -7,3 +7,4 @@ dist
.coverage
cover/
docs/_build/
tests/integration/ccm

View File

@@ -62,7 +62,7 @@ setup(
packages=["cassandra", "cassandra.io"],
ext_modules=[murmur3],
install_requires=['futures'],
test_requires=['nose', 'mock'],
tests_require=['nose', 'mock', 'ccm'],
cmdclass={"doc": doc},
classifiers=[
'Development Status :: 3 - Alpha',

View File

@@ -1,53 +1,75 @@
import logging
log = logging.getLogger(__name__)
import unittest
import os
from threading import Event
from cassandra.cluster import Cluster
from cassandra.policies import HostDistance
logging.getLogger().addHandler(logging.StreamHandler())
try:
from ccmlib.cluster import Cluster as CCMCluster
from ccmlib import common
except ImportError:
raise unittest.SkipTest('ccm is a dependency for integration tests')
CLUSTER_NAME = 'test_cluster'
CCM_CLUSTER = None
path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'ccm')
if not os.path.exists(path):
os.mkdir(path)
def get_cluster():
return CCM_CLUSTER
existing_keyspaces = None
def setup_package():
try:
cluster = Cluster()
cluster.set_core_connections_per_host(HostDistance.LOCAL, 1)
cluster.set_max_connections_per_host(HostDistance.LOCAL, 1)
session = cluster.connect()
except Exception, exc:
log.exception('Failed to connect to cluster:')
raise unittest.SkipTest('Failed to connect to cluster: %r' % exc)
try:
global existing_keyspaces
results = session.execute("SELECT keyspace_name FROM system.schema_keyspaces")
existing_keyspaces = set([row[0] for row in results])
finally:
try:
cluster.shutdown()
except Exception, exc:
log.exception('Failed to connect to cluster:')
raise unittest.SkipTest('Failed to connect to cluster: %r' % exc)
cluster = CCMCluster.load(path, CLUSTER_NAME)
log.debug("Found existing ccm test cluster, clearing")
cluster.clear()
except:
log.debug("Creating new ccm test cluster")
cluster = CCMCluster(path, CLUSTER_NAME, cassandra_version='1.2.6')
cluster.set_configuration_options({'start_native_transport': True})
common.switch_cluster(path, CLUSTER_NAME)
cluster.populate(3)
log.debug("Starting ccm test cluster")
cluster.start(wait_for_binary_proto=True)
except:
log.exception("Failed to start ccm cluster:")
raise
global CCM_CLUSTER
CCM_CLUSTER = cluster
def teardown_package():
try:
cluster = Cluster()
cluster.set_core_connections_per_host(HostDistance.LOCAL, 1)
cluster.set_max_connections_per_host(HostDistance.LOCAL, 1)
session = cluster.connect()
except Exception:
log.exception('Failed to connect to cluster:')
return
try:
if existing_keyspaces:
results = session.execute("SELECT keyspace_name FROM system.schema_keyspaces")
current_keyspaces = set([row[0] for row in results])
for keyspace in current_keyspaces - existing_keyspaces:
session.execute("DROP KEYSPACE %s" % (keyspace,))
finally:
if CCM_CLUSTER:
try:
cluster.shutdown()
except:
log.exception('Failed to connect to cluster:')
CCM_CLUSTER.clear()
except Exception:
log.exception("Failed to clear cluster")
class UpDownWaiter(object):
def __init__(self, host):
self.down_event = Event()
self.up_event = Event()
host.monitor.register(self)
def on_up(self, host):
self.up_event.set()
def on_down(self, host):
self.down_event.set()
def wait_for_down(self):
self.down_event.wait()
def wait_for_up(self):
self.up_event.wait()

View File

@@ -278,7 +278,7 @@ class TokenMetadataTest(unittest.TestCase):
cluster = Cluster()
cluster.connect()
tmap = cluster.metadata.token_map
self.assertTrue(issubclass(tmap.token_cls, Token))
self.assertTrue(issubclass(tmap.token_class, Token))
self.assertEqual(1, len(tmap.ring))
self.assertEqual(1, len(tmap.tokens_to_hosts))
cluster.shutdown()