33import com .zebrunner .agent .core .config .ConfigurationHolder ;
44import com .zebrunner .agent .core .registrar .TestSessionRegistrar ;
55import com .zebrunner .agent .core .registrar .descriptor .SessionStartDescriptor ;
6+ import lombok .Data ;
7+ import lombok .NoArgsConstructor ;
8+ import lombok .RequiredArgsConstructor ;
69import lombok .extern .slf4j .Slf4j ;
710import net .bytebuddy .implementation .bind .annotation .Argument ;
811import net .bytebuddy .implementation .bind .annotation .RuntimeType ;
2124import java .net .URISyntaxException ;
2225import java .net .URL ;
2326import java .util .Arrays ;
27+ import java .util .function .Consumer ;
2428
2529@ Slf4j
2630public class StartSessionInterceptor {
2731
2832 private static final TestSessionRegistrar REGISTRAR = TestSessionRegistrar .getInstance ();
2933 private static final CapabilitiesCustomizerChain CAPABILITIES_CUSTOMIZER_CHAIN = CapabilitiesCustomizerChain .getInstance ();
34+ private static final ThreadLocal <Consumer <SessionRegisterDescriptor >> SESSION_REGISTER_DESCRIPTOR_CONSUMER = new ThreadLocal <>();
35+
36+ public static void setSessionRegisterConsumer (Consumer <SessionRegisterDescriptor > consumer ) {
37+ SESSION_REGISTER_DESCRIPTOR_CONSUMER .set (consumer );
38+ }
3039
3140 @ RuntimeType
3241 public static void onSessionStart (@ This RemoteWebDriver driver ,
@@ -37,7 +46,9 @@ public static void onSessionStart(@This RemoteWebDriver driver,
3746 capabilities = customizeCapabilities (methodInvocationProxy , capabilities );
3847 }
3948
40- SessionStartDescriptor startDescriptor = SessionStartDescriptor .initiatedWith (capabilities .asMap ());
49+ SessionRegisterDescriptor sessionRegisterDescriptor = new SessionRegisterDescriptor ();
50+ sessionRegisterDescriptor .setSessionStartDescriptor (SessionStartDescriptor .initiatedWith (capabilities .asMap ()));
51+
4152 try {
4253 methodInvocationProxy .run ();
4354
@@ -61,14 +72,24 @@ public static void onSessionStart(@This RemoteWebDriver driver,
6172 driverCapabilities = (Capabilities ) capabilitiesField .get (driver );
6273 }
6374
64- startDescriptor .successfullyStartedWith (sessionId , driverCapabilities .asMap ());
75+ sessionRegisterDescriptor .getSessionStartDescriptor ()
76+ .successfullyStartedWith (sessionId , driverCapabilities .asMap ());
6577 } catch (Exception e ) {
78+ sessionRegisterDescriptor .setException (e );
6679 StringWriter errorMessageStringWriter = new StringWriter ();
6780 e .printStackTrace (new PrintWriter (errorMessageStringWriter ));
68- startDescriptor .failedToStart (errorMessageStringWriter .toString ());
81+ sessionRegisterDescriptor .getSessionStartDescriptor ()
82+ .failedToStart (errorMessageStringWriter .toString ());
6983 throw e ;
7084 } finally {
71- REGISTRAR .registerStart (startDescriptor );
85+ if (SESSION_REGISTER_DESCRIPTOR_CONSUMER .get () == null ) {
86+ REGISTRAR .registerStart (sessionRegisterDescriptor .getSessionStartDescriptor ());
87+ } else {
88+ Consumer <SessionRegisterDescriptor > consumer = SESSION_REGISTER_DESCRIPTOR_CONSUMER .get ();
89+ SESSION_REGISTER_DESCRIPTOR_CONSUMER .remove ();
90+ sessionRegisterDescriptor .setTestSessionRegistrar (REGISTRAR );
91+ consumer .accept (sessionRegisterDescriptor );
92+ }
7293 }
7394 }
7495
@@ -157,4 +178,12 @@ private static Capabilities customizeCapabilities(Runnable methodInvocationProxy
157178 return capabilities ;
158179 }
159180
181+ @ Data
182+ @ NoArgsConstructor
183+ @ RequiredArgsConstructor
184+ public static class SessionRegisterDescriptor {
185+ private TestSessionRegistrar testSessionRegistrar ;
186+ private SessionStartDescriptor sessionStartDescriptor ;
187+ private Exception exception ;
188+ }
160189}
0 commit comments