22import unittest
33
44from nose .tools import eq_ , ok_
5+ from ddtrace .contrib .tornado .compat import futures_available
56
67from tornado import version_info
78
@@ -19,12 +20,11 @@ def test_on_executor_handler(self):
1920 eq_ (200 , response .code )
2021
2122 traces = self .tracer .writer .pop_traces ()
22- eq_ (2 , len (traces ))
23- eq_ (1 , len (traces [0 ]))
24- eq_ (1 , len (traces [1 ]))
23+ eq_ (1 , len (traces ))
24+ eq_ (2 , len (traces [0 ]))
2525
2626 # this trace yields the execution of the thread
27- request_span = traces [1 ][0 ]
27+ request_span = traces [0 ][0 ]
2828 eq_ ('tornado-web' , request_span .service )
2929 eq_ ('tornado.request' , request_span .name )
3030 eq_ ('http' , request_span .span_type )
@@ -36,46 +36,39 @@ def test_on_executor_handler(self):
3636 ok_ (request_span .duration >= 0.05 )
3737
3838 # this trace is executed in a different thread
39- executor_span = traces [0 ][0 ]
39+ executor_span = traces [0 ][1 ]
4040 eq_ ('tornado-web' , executor_span .service )
4141 eq_ ('tornado.executor.with' , executor_span .name )
4242 eq_ (executor_span .parent_id , request_span .span_id )
4343 eq_ (0 , executor_span .error )
4444 ok_ (executor_span .duration >= 0.05 )
4545
46- def test_on_delayed_executor_handler ( self ):
47- # it should trace a handler that uses @run_on_executor but that doesn't
48- # wait for its termination
49- response = self .fetch ('/executor_delayed_handler /' )
46+ @ unittest . skipUnless ( futures_available , 'Futures must be available to test direct submit' )
47+ def test_on_executor_submit ( self ):
48+ # it should propagate the context when a handler uses directly the `executor.submit()`
49+ response = self .fetch ('/executor_submit_handler /' )
5050 eq_ (200 , response .code )
5151
52- # timeout for the background thread execution
53- time .sleep (0.1 )
54-
5552 traces = self .tracer .writer .pop_traces ()
56- eq_ (2 , len (traces ))
57- eq_ (1 , len (traces [0 ]))
58- eq_ (1 , len (traces [1 ]))
59-
60- # order the `traces` list to have deterministic results
61- # (required only for this special use case)
62- traces .sort (key = lambda x : x [0 ].name , reverse = True )
53+ eq_ (1 , len (traces ))
54+ eq_ (2 , len (traces [0 ]))
6355
6456 # this trace yields the execution of the thread
6557 request_span = traces [0 ][0 ]
6658 eq_ ('tornado-web' , request_span .service )
6759 eq_ ('tornado.request' , request_span .name )
6860 eq_ ('http' , request_span .span_type )
69- eq_ ('tests.contrib.tornado.web.app.ExecutorDelayedHandler ' , request_span .resource )
61+ eq_ ('tests.contrib.tornado.web.app.ExecutorSubmitHandler ' , request_span .resource )
7062 eq_ ('GET' , request_span .get_tag ('http.method' ))
7163 eq_ ('200' , request_span .get_tag ('http.status_code' ))
72- eq_ ('/executor_delayed_handler /' , request_span .get_tag ('http.url' ))
64+ eq_ ('/executor_submit_handler /' , request_span .get_tag ('http.url' ))
7365 eq_ (0 , request_span .error )
66+ ok_ (request_span .duration >= 0.05 )
7467
7568 # this trace is executed in a different thread
76- executor_span = traces [1 ][ 0 ]
69+ executor_span = traces [0 ][ 1 ]
7770 eq_ ('tornado-web' , executor_span .service )
78- eq_ ('tornado.executor.with ' , executor_span .name )
71+ eq_ ('tornado.executor.query ' , executor_span .name )
7972 eq_ (executor_span .parent_id , request_span .span_id )
8073 eq_ (0 , executor_span .error )
8174 ok_ (executor_span .duration >= 0.05 )
@@ -86,12 +79,11 @@ def test_on_executor_exception_handler(self):
8679 eq_ (500 , response .code )
8780
8881 traces = self .tracer .writer .pop_traces ()
89- eq_ (2 , len (traces ))
90- eq_ (1 , len (traces [0 ]))
91- eq_ (1 , len (traces [1 ]))
82+ eq_ (1 , len (traces ))
83+ eq_ (2 , len (traces [0 ]))
9284
9385 # this trace yields the execution of the thread
94- request_span = traces [1 ][0 ]
86+ request_span = traces [0 ][0 ]
9587 eq_ ('tornado-web' , request_span .service )
9688 eq_ ('tornado.request' , request_span .name )
9789 eq_ ('http' , request_span .span_type )
@@ -104,7 +96,7 @@ def test_on_executor_exception_handler(self):
10496 ok_ ('Exception: Ouch!' in request_span .get_tag ('error.stack' ))
10597
10698 # this trace is executed in a different thread
107- executor_span = traces [0 ][0 ]
99+ executor_span = traces [0 ][1 ]
108100 eq_ ('tornado-web' , executor_span .service )
109101 eq_ ('tornado.executor.with' , executor_span .name )
110102 eq_ (executor_span .parent_id , request_span .span_id )
@@ -123,12 +115,11 @@ def test_on_executor_custom_kwarg(self):
123115 eq_ (200 , response .code )
124116
125117 traces = self .tracer .writer .pop_traces ()
126- eq_ (2 , len (traces ))
127- eq_ (1 , len (traces [0 ]))
128- eq_ (1 , len (traces [1 ]))
118+ eq_ (1 , len (traces ))
119+ eq_ (2 , len (traces [0 ]))
129120
130121 # this trace yields the execution of the thread
131- request_span = traces [1 ][0 ]
122+ request_span = traces [0 ][0 ]
132123 eq_ ('tornado-web' , request_span .service )
133124 eq_ ('tornado.request' , request_span .name )
134125 eq_ ('http' , request_span .span_type )
@@ -140,7 +131,7 @@ def test_on_executor_custom_kwarg(self):
140131 ok_ (request_span .duration >= 0.05 )
141132
142133 # this trace is executed in a different thread
143- executor_span = traces [0 ][0 ]
134+ executor_span = traces [0 ][1 ]
144135 eq_ ('tornado-web' , executor_span .service )
145136 eq_ ('tornado.executor.with' , executor_span .name )
146137 eq_ (executor_span .parent_id , request_span .span_id )
0 commit comments