From b56030b6a27ea51b1964b2d177da975a1c653e9b Mon Sep 17 00:00:00 2001 From: Joaquin Casares Date: Thu, 17 Apr 2014 18:46:38 -0500 Subject: [PATCH] Jenkins-ify these test exceptions on the master branch --- tests/integration/standard/test_connection.py | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/tests/integration/standard/test_connection.py b/tests/integration/standard/test_connection.py index 3b585f67..8d6ab593 100644 --- a/tests/integration/standard/test_connection.py +++ b/tests/integration/standard/test_connection.py @@ -22,7 +22,8 @@ except ImportError: from functools import partial from threading import Thread, Event -from cassandra import ConsistencyLevel +from cassandra import ConsistencyLevel, OperationTimedOut +from cassandra.cluster import NoHostAvailable from cassandra.decoder import QueryMessage from cassandra.io.asyncorereactor import AsyncoreConnection @@ -36,11 +37,33 @@ class ConnectionTest(object): klass = None + def get_connection(self): + """ + Helper method to solve automated testing issues within Jenkins. + Officially patched under the 2.0 branch through + 17998ef72a2fe2e67d27dd602b6ced33a58ad8ef, but left as is for the + 1.0 branch due to possible regressions for fixing an + automated testing edge-case. + """ + conn = None + e = None + for i in xrange(5): + try: + conn = self.klass.factory() + break + except (OperationTimedOut, NoHostAvailable) as e: + continue + + if conn: + return conn + else: + raise e + def test_single_connection(self): """ Test a single connection with sequential requests. """ - conn = self.klass.factory() + conn = self.get_connection() query = "SELECT keyspace_name FROM system.schema_keyspaces LIMIT 1" event = Event() @@ -63,7 +86,7 @@ class ConnectionTest(object): """ Test a single connection with pipelined requests. """ - conn = self.klass.factory() + conn = self.get_connection() query = "SELECT keyspace_name FROM system.schema_keyspaces LIMIT 1" responses = [False] * 100 event = Event() @@ -85,7 +108,7 @@ class ConnectionTest(object): """ Test multiple connections with pipelined requests. """ - conns = [self.klass.factory() for i in range(5)] + conns = [self.get_connection() for i in range(5)] events = [Event() for i in range(5)] query = "SELECT keyspace_name FROM system.schema_keyspaces LIMIT 1" @@ -116,7 +139,7 @@ class ConnectionTest(object): num_threads = 5 event = Event() - conn = self.klass.factory() + conn = self.get_connection() query = "SELECT keyspace_name FROM system.schema_keyspaces LIMIT 1" def cb(all_responses, thread_responses, request_num, *args, **kwargs): @@ -173,7 +196,7 @@ class ConnectionTest(object): threads = [] for i in range(num_conns): - conn = self.klass.factory() + conn = self.get_connection() t = Thread(target=send_msgs, args=(conn, events[i])) threads.append(t)