55
66from ddtrace .contrib .mysql import missing_modules
77
8- from nose .tools import eq_ , assert_greater_equal , assert_is_not_none , assert_true
8+ from nose .tools import eq_ , \
9+ assert_dict_contains_subset , \
10+ assert_greater_equal , \
11+ assert_is_not_none , \
12+ assert_true
913
1014from ddtrace .tracer import Tracer
1115from ddtrace .contrib .mysql import get_traced_mysql_connection
@@ -181,10 +185,14 @@ def test_query_with_several_rows():
181185 MySQL = get_traced_mysql_connection (tracer , service = SERVICE )
182186 conn = MySQL (** MYSQL_CONFIG )
183187 cursor = conn .cursor ()
184- cursor .execute ("SELECT n FROM "
185- "(SELECT 42 n UNION SELECT 421 UNION SELECT 4210) m" )
188+ query = "SELECT n FROM " \
189+ "(SELECT 42 n UNION SELECT 421 UNION SELECT 4210) m"
190+ cursor .execute (query )
186191 rows = cursor .fetchall ()
187192 eq_ (len (rows ), 3 )
193+ spans = writer .pop ()
194+ for span in spans :
195+ assert_dict_contains_subset ({'sql.query' : query }, span .meta )
188196
189197def test_query_many ():
190198 """Tests that the executemany method is correctly wrapped."""
@@ -208,8 +216,14 @@ def test_query_many():
208216 eq_ (rows [0 ][1 ], "this is bar" )
209217 eq_ (rows [1 ][0 ], "foo" )
210218 eq_ (rows [1 ][1 ], "this is foo" )
219+
211220 cursor .execute (DROP_TABLE_DUMMY )
212221
222+ spans = writer .pop ()
223+ assert_greater_equal (len (spans ), 3 )
224+ span = spans [2 ]
225+ assert_dict_contains_subset ({'sql.query' : stmt }, span .meta )
226+
213227def test_query_proc ():
214228 """Tests that callproc works as expected, and generates a correct span."""
215229 writer = DummyWriter ()
@@ -270,8 +284,10 @@ def test_fetch_variants():
270284 stmt = "INSERT INTO dummy (dummy_key,dummy_value) VALUES (%s, %s)"
271285 data = [("%02d" % i , "this is %d" % i ) for i in range (NB_FETCH_TOTAL )]
272286 cursor .executemany (stmt , data )
273- cursor .execute ("SELECT dummy_key, dummy_value FROM dummy "
274- "ORDER BY dummy_key" )
287+ query = "SELECT dummy_key, dummy_value FROM dummy " \
288+ "ORDER BY dummy_key"
289+ cursor .execute (query )
290+ writer .pop () # flushing traces
275291
276292 rows = cursor .fetchmany (size = NB_FETCH_MANY )
277293 fetchmany_rowcount_a = cursor .rowcount
@@ -303,10 +319,11 @@ def test_fetch_variants():
303319
304320 eq_ (NB_FETCH_TOTAL , fetchmany_nbrows_a + fetchmany_nbrows_b + 2 )
305321
306- cursor .execute (DROP_TABLE_DUMMY )
307-
308322 spans = writer .pop ()
309- assert_greater_equal (len (spans ), 6 )
323+ for span in spans :
324+ assert_dict_contains_subset ({'sql.query' : query }, span .meta )
325+
326+ cursor .execute (DROP_TABLE_DUMMY )
310327
311328def check_connection_class (buffered , raw , baseclass_name ):
312329 writer = DummyWriter ()
@@ -317,10 +334,14 @@ def check_connection_class(buffered, raw, baseclass_name):
317334 conn = MySQL (buffered = buffered , raw = raw , ** MYSQL_CONFIG )
318335 cursor = conn .cursor ()
319336 eq_ (cursor ._datadog_baseclass_name , baseclass_name )
320- cursor .execute ("SELECT 1" )
337+ query = "SELECT 1"
338+ cursor .execute (query )
321339 rows = cursor .fetchall ()
322340 eq_ (len (rows ), 1 )
323341 eq_ (int (rows [0 ][0 ]), 1 )
342+ spans = writer .pop ()
343+ for span in spans :
344+ assert_dict_contains_subset ({'sql.query' : query }, span .meta )
324345
325346def test_connection_class ():
326347 """
@@ -345,10 +366,14 @@ def check_cursor_class(buffered, raw, baseclass_name):
345366 conn = MySQL (** MYSQL_CONFIG )
346367 cursor = conn .cursor (buffered = buffered , raw = raw )
347368 eq_ (cursor ._datadog_baseclass_name , baseclass_name )
369+ query = "SELECT 1"
348370 cursor .execute ("SELECT 1" )
349371 rows = cursor .fetchall ()
350372 eq_ (len (rows ), 1 )
351373 eq_ (int (rows [0 ][0 ]), 1 )
374+ spans = writer .pop ()
375+ for span in spans :
376+ assert_dict_contains_subset ({'sql.query' : query }, span .meta )
352377
353378def test_cursor_class ():
354379 """
0 commit comments