@@ -392,50 +392,91 @@ def test_process_response(self):
392392
393393 self .assertEqual (span .attributes , expected_attributes )
394394
395+ def test_process_response_unfinished_child_span (self ):
396+ from opencensus .trace .ext .django import middleware
397+
398+ trace_id = '2dd43a1d6b2549c6bc2a1a54c2fc0b05'
399+ span_id = '6e0c63257de34c92'
400+ django_trace_id = '{}/{}' .format (trace_id , span_id )
401+
402+ django_request = RequestFactory ().get ('/' , ** {
403+ google_cloud_format ._TRACE_CONTEXT_HEADER_NAME : django_trace_id })
404+
405+ middleware_obj = middleware .OpencensusMiddleware ()
406+
407+ middleware_obj .process_request (django_request )
408+ tracer = middleware ._get_current_tracer ()
409+ span = tracer .current_span ()
410+
411+ exporter_mock = mock .Mock ()
412+ tracer .exporter = exporter_mock
413+
414+ django_response = mock .Mock ()
415+ django_response .status_code = 500
416+
417+ expected_attributes = {
418+ 'http.url' : u'/' ,
419+ 'http.method' : 'GET' ,
420+ 'http.status_code' : '500' ,
421+ 'django.user.id' : '123' ,
422+ 'django.user.name' : 'test_name'
423+ }
424+
425+ mock_user = mock .Mock ()
426+ mock_user .pk = 123
427+ mock_user .get_username .return_value = 'test_name'
428+ django_request .user = mock_user
429+
430+ tracer .start_span ()
431+ self .assertNotEqual (span , tracer .current_span ())
432+ middleware_obj .process_response (django_request , django_response )
433+
434+ self .assertEqual (span .attributes , expected_attributes )
435+
395436
396437class Test__set_django_attributes (unittest .TestCase ):
397- class Tracer (object ):
438+ class Span (object ):
398439 def __init__ (self ):
399440 self .attributes = {}
400441
401- def add_attribute_to_current_span (self , key , value ):
442+ def add_attribute (self , key , value ):
402443 self .attributes [key ] = value
403444
404445 def test__set_django_attributes_no_user (self ):
405446 from opencensus .trace .ext .django .middleware import \
406447 _set_django_attributes
407- tracer = self .Tracer ()
448+ span = self .Span ()
408449 request = mock .Mock ()
409450
410451 request .user = None
411452
412- _set_django_attributes (tracer , request )
453+ _set_django_attributes (span , request )
413454
414455 expected_attributes = {}
415456
416- self .assertEqual (tracer .attributes , expected_attributes )
457+ self .assertEqual (span .attributes , expected_attributes )
417458
418459 def test__set_django_attributes_no_user_info (self ):
419460 from opencensus .trace .ext .django .middleware import \
420461 _set_django_attributes
421- tracer = self .Tracer ()
462+ span = self .Span ()
422463 request = mock .Mock ()
423464 django_user = mock .Mock ()
424465
425466 request .user = django_user
426467 django_user .pk = None
427468 django_user .get_username .return_value = None
428469
429- _set_django_attributes (tracer , request )
470+ _set_django_attributes (span , request )
430471
431472 expected_attributes = {}
432473
433- self .assertEqual (tracer .attributes , expected_attributes )
474+ self .assertEqual (span .attributes , expected_attributes )
434475
435476 def test__set_django_attributes_with_user_info (self ):
436477 from opencensus .trace .ext .django .middleware import \
437478 _set_django_attributes
438- tracer = self .Tracer ()
479+ span = self .Span ()
439480 request = mock .Mock ()
440481 django_user = mock .Mock ()
441482
@@ -445,10 +486,10 @@ def test__set_django_attributes_with_user_info(self):
445486 django_user .pk = test_id
446487 django_user .get_username .return_value = test_name
447488
448- _set_django_attributes (tracer , request )
489+ _set_django_attributes (span , request )
449490
450491 expected_attributes = {
451492 'django.user.id' : '123' ,
452493 'django.user.name' : test_name }
453494
454- self .assertEqual (tracer .attributes , expected_attributes )
495+ self .assertEqual (span .attributes , expected_attributes )
0 commit comments