From 4e42780f30399fd52c68df5363685486ab93364f Mon Sep 17 00:00:00 2001 From: GregBestland Date: Tue, 24 Nov 2015 11:34:57 -0600 Subject: [PATCH] Adding test for python-438 --- tests/integration/__init__.py | 4 +++ tests/integration/standard/test_query.py | 37 ++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py index 904c57e6..34606f63 100644 --- a/tests/integration/__init__.py +++ b/tests/integration/__init__.py @@ -392,6 +392,10 @@ class BasicKeyspaceUnitTestCase(unittest.TestCase): def function_table_name(self): return self._testMethodName.lower() + @property + def keyspace_table_name(self): + return "{0}.{1}".format(self.keyspace_name, self._testMethodName.lower()) + @classmethod def drop_keyspace(cls): execute_with_long_wait_retry(cls.session, "DROP KEYSPACE {0}".format(cls.ks_name)) diff --git a/tests/integration/standard/test_query.py b/tests/integration/standard/test_query.py index ade54bcf..5bb165c0 100644 --- a/tests/integration/standard/test_query.py +++ b/tests/integration/standard/test_query.py @@ -22,7 +22,7 @@ except ImportError: from cassandra import ConsistencyLevel from cassandra.query import (PreparedStatement, BoundStatement, SimpleStatement, - BatchStatement, BatchType, dict_factory) + BatchStatement, BatchType, dict_factory, TraceUnavailable) from cassandra.cluster import Cluster from cassandra.policies import HostDistance @@ -138,6 +138,40 @@ class QueryTests(BasicSharedKeyspaceUnitTestCase): self.assertIsNotNone(client_ip, "Client IP was not set in trace with C* >= 2.2") self.assertTrue(pat.match(client_ip), "Client IP from trace did not match the expected value") + def test_incomplete_query_trace(self): + """ + Tests to ensure that partial tracing works. + + Creates a table and runs an insert. Then attempt a query with tracing enabled. After the query is run we delete the + duration information associated with the trace, and attempt to populate the tracing information. We should receive tracing + information without any trace enabled. + + @since 3.0.0 + @jira_ticket PYTHON-438 + @expected_result tracing comes back sans duration + + @test_category tracing + """ + + # Create table and run insert, then select + self.session.execute("CREATE TABLE {0} (k INT, i INT, PRIMARY KEY(k, i))".format(self.keyspace_table_name)) + self.session.execute("INSERT INTO {0} (k, i) VALUES (0, 1)".format(self.keyspace_table_name)) + response_future = self.session.execute_async("SELECT i FROM {0} WHERE k=0".format(self.keyspace_table_name), trace=True) + response_future.result() + + # Delete trace duration from latest select session. + DELETE_TRACES = "DELETE duration FROM system_traces.sessions WHERE session_id = {0}" + + for trace in response_future._query_traces: + self.session.execute(DELETE_TRACES.format(trace.trace_id)) + self.assertRaises(TraceUnavailable,trace.populate(wait_for_complete=False)) + self.assertIsNone(trace.duration) + self.assertIsNotNone(trace.trace_id) + self.assertIsNotNone(trace.request_type) + self.assertIsNotNone(trace.parameters) + self.assertIsNotNone(trace.events) + self.assertIsNotNone(trace.started_at) + def test_column_names(self): """ Test to validate the columns are present on the result set. @@ -295,7 +329,6 @@ class BatchStatementTests(BasicSharedKeyspaceUnitTestCase): self.cluster.set_core_connections_per_host(HostDistance.LOCAL, 1) self.session = self.cluster.connect() - def tearDown(self): self.cluster.shutdown()