Start using CCM for integration tests
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -7,3 +7,4 @@ dist
|
||||
.coverage
|
||||
cover/
|
||||
docs/_build/
|
||||
tests/integration/ccm
|
||||
|
||||
2
setup.py
2
setup.py
@@ -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',
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user