@@ -67,6 +67,44 @@ def test_finish_with_spans(self):
6767
6868 self .assertEqual (tracer ._spans_list , [])
6969
70+ def test_finish_with_tracer_subspans (self ):
71+ tracer = context_tracer .ContextTracer ()
72+ parent = tracer .start_span ('parent' )
73+ child = tracer .start_span ('child' )
74+ self .assertEqual (child .parent_span , parent )
75+ tracer .exporter = mock .Mock ()
76+ tracer .finish ()
77+
78+ self .assertEqual (tracer .exporter .export .call_count , 2 )
79+ [[[[c_sd ]], _ ], [[[p_sd ]], _ ]] = tracer .exporter .export .call_args_list
80+
81+ self .assertEqual (p_sd .span_id , parent .span_id )
82+ self .assertIsNone (parent .parent_span .span_id )
83+ self .assertIsNone (p_sd .parent_span_id )
84+ self .assertEqual (c_sd .span_id , child .span_id )
85+ self .assertEqual (c_sd .parent_span_id , parent .span_id )
86+
87+ self .assertEqual (tracer ._spans_list , [])
88+
89+ def test_finish_with_span_subspans (self ):
90+ tracer = context_tracer .ContextTracer ()
91+ parent = tracer .start_span ('parent' )
92+ child = parent .span ('child' )
93+ self .assertEqual (child .parent_span , parent )
94+ tracer .exporter = mock .Mock ()
95+ tracer .finish ()
96+
97+ self .assertEqual (tracer .exporter .export .call_count , 1 )
98+ [[[[c_sd , p_sd ]], _ ]] = tracer .exporter .export .call_args_list
99+
100+ self .assertEqual (p_sd .span_id , parent .span_id )
101+ self .assertIsNone (parent .parent_span .span_id )
102+ self .assertIsNone (p_sd .parent_span_id )
103+ self .assertEqual (c_sd .span_id , child .span_id )
104+ self .assertEqual (c_sd .parent_span_id , parent .span_id )
105+
106+ self .assertEqual (tracer ._spans_list , [])
107+
70108 def test_end_leftover_spans (self ):
71109 tracer = context_tracer .ContextTracer ()
72110 tracer ._spans_list = [span .Span (name = 'span' )]
0 commit comments