@@ -70,22 +70,32 @@ func (s *Scenario) Run(ctx context.Context, t *testing.T) error {
7070		}()
7171		for  idx , spec  :=  range  s .Tests  {
7272			sb  :=  spec .Base ()
73- 			wait  :=  sb .Wait 
74- 			if  wait  !=  nil  &&  wait .Before  !=  ""  {
75- 				debug .Println (ctx , "wait: %s before" , wait .Before )
76- 				time .Sleep (wait .BeforeDuration ())
77- 			}
78- 			plugin  :=  s .evalPlugins [idx ]
79- 
80- 			rt  :=  getRetry (ctx , scDefaults , plugin , spec )
8173
8274			// Create a brand new context that inherits the top-level context's 
8375			// cancel func. We want to set deadlines for each test spec and if 
8476			// we mutate the single supplied top-level context, then only the 
8577			// first deadline/timeout will be used. 
8678			specCtx , specCancel  :=  context .WithCancel (ctx )
8779
88- 			to  :=  getTimeout (ctx , scDefaults , plugin , spec )
80+ 			specTraceMsg  :=  strconv .Itoa (idx )
81+ 			if  sb .Name  !=  ""  {
82+ 				specTraceMsg  +=  ":"  +  sb .Name 
83+ 			}
84+ 			specCtx  =  gdtcontext .PushTrace (specCtx , specTraceMsg )
85+ 			popTracer  :=  func () {
86+ 				specCtx  =  gdtcontext .PopTrace (specCtx )
87+ 			}
88+ 
89+ 			wait  :=  sb .Wait 
90+ 			if  wait  !=  nil  &&  wait .Before  !=  ""  {
91+ 				debug .Println (specCtx , "wait: %s before" , wait .Before )
92+ 				time .Sleep (wait .BeforeDuration ())
93+ 			}
94+ 			plugin  :=  s .evalPlugins [idx ]
95+ 
96+ 			rt  :=  getRetry (specCtx , scDefaults , plugin , spec )
97+ 
98+ 			to  :=  getTimeout (specCtx , scDefaults , plugin , spec )
8999			if  to  !=  nil  {
90100				specCtx , specCancel  =  context .WithTimeout (specCtx , to .Duration ())
91101			}
@@ -98,19 +108,21 @@ func (s *Scenario) Run(ctx context.Context, t *testing.T) error {
98108			select  {
99109			case  <- specCtx .Done ():
100110				t .Fatalf ("assertion failed: timeout exceeded (%s)" , to .After )
111+ 				popTracer ()
101112				specCancel ()
102113				break 
103114			case  runres  :=  <- ch :
104115				res  =  runres .r 
105116				rterr  =  runres .err 
106117			}
107118			if  rterr  !=  nil  {
119+ 				popTracer ()
108120				specCancel ()
109121				break 
110122			}
111123
112124			if  wait  !=  nil  &&  wait .After  !=  ""  {
113- 				debug .Println (ctx , "wait: %s after" , wait .After )
125+ 				debug .Println (specCtx , "wait: %s after" , wait .After )
114126				time .Sleep (wait .AfterDuration ())
115127			}
116128
@@ -123,6 +135,7 @@ func (s *Scenario) Run(ctx context.Context, t *testing.T) error {
123135			for  _ , fail  :=  range  res .Failures () {
124136				t .Fatal (fail )
125137			}
138+ 			popTracer ()
126139			specCancel ()
127140		}
128141	})
@@ -142,15 +155,6 @@ func (s *Scenario) runSpec(
142155	idx  int ,
143156	spec  api.Evaluable ,
144157) {
145- 	sb  :=  spec .Base ()
146- 	specTraceMsg  :=  strconv .Itoa (idx )
147- 	if  sb .Name  !=  ""  {
148- 		specTraceMsg  +=  ":"  +  sb .Name 
149- 	}
150- 	ctx  =  gdtcontext .PushTrace (ctx , specTraceMsg )
151- 	defer  func () {
152- 		ctx  =  gdtcontext .PopTrace (ctx )
153- 	}()
154158	if  retry  ==  nil  ||  retry  ==  api .NoRetry  {
155159		// Just evaluate the test spec once 
156160		res , err  :=  spec .Eval (ctx )
0 commit comments