aboutsummaryrefslogtreecommitdiffstats
path: root/vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java
diff options
context:
space:
mode:
Diffstat (limited to 'vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java')
-rw-r--r--vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java147
1 files changed, 147 insertions, 0 deletions
diff --git a/vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java b/vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java
new file mode 100644
index 000000000..6daa6d604
--- /dev/null
+++ b/vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java
@@ -0,0 +1,147 @@
+package vid.automation.reportportal;
+
+import static org.apache.commons.beanutils.MethodUtils.invokeStaticMethod;
+
+import org.apache.commons.proxy.ProxyFactory;
+import org.apache.commons.proxy.factory.javassist.JavassistProxyFactory;
+import org.apache.commons.proxy.invoker.NullInvoker;
+import org.openqa.selenium.WebDriver;
+import org.testng.IExecutionListener;
+import org.testng.ISuite;
+import org.testng.ISuiteListener;
+import org.testng.ITestContext;
+import org.testng.ITestResult;
+import org.testng.internal.IResultListener2;
+
+/**
+ * Loads and delegates to ReportPortalListener. When class not found -- yields no-op object, and no side-effect.
+ */
+public class ReportPortalListenerDelegator implements IExecutionListener, ISuiteListener, IResultListener2 {
+
+ private static final String CLASSNAME_REPORT_PORTAL_LISTENER = "com.att.automation.common.report_portal_integration.listeners.ReportPortalListener";
+ private static final String CLASSNAME_WEB_DRIVER_SCREENSHOTS_PROVIDER = "com.att.automation.common.report_portal_integration.screenshots.WebDriverScreenshotsProvider";
+
+ private static final Object instance = createReportPortalListener();
+
+ private final IExecutionListener iExecutionListener;
+ private final ISuiteListener iSuiteListener;
+ private final IResultListener2 iResultListener2;
+
+ public ReportPortalListenerDelegator() {
+ iExecutionListener = ((IExecutionListener) instance);
+ iSuiteListener = ((ISuiteListener) instance);
+ iResultListener2 = ((IResultListener2) instance);
+ }
+
+ public static void setScreenShotsWebDriver(WebDriver driver) {
+ try {
+ invokeStaticMethod(instance.getClass(), "setScreenShotsProvider", createScreenshotsProvider(driver));
+ } catch (ClassNotFoundException e) {
+ // if class not found, don't bother
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ @Override
+ public void beforeConfiguration(ITestResult tr) {
+ iResultListener2.beforeConfiguration(tr);
+ }
+
+ @Override
+ public void onConfigurationSuccess(ITestResult itr) {
+ iResultListener2.onConfigurationSuccess(itr);
+ }
+
+ @Override
+ public void onConfigurationFailure(ITestResult itr) {
+ iResultListener2.onConfigurationFailure(itr);
+ }
+
+ @Override
+ public void onConfigurationSkip(ITestResult itr) {
+ iResultListener2.onConfigurationSkip(itr);
+ }
+
+ @Override
+ public void onExecutionStart() {
+ iExecutionListener.onExecutionStart();
+ }
+
+ @Override
+ public void onExecutionFinish() {
+ iExecutionListener.onExecutionFinish();
+ }
+
+ @Override
+ public void onStart(ISuite suite) {
+ iSuiteListener.onStart(suite);
+
+ }
+
+ @Override
+ public void onFinish(ISuite suite) {
+ iSuiteListener.onFinish(suite);
+ }
+
+ @Override
+ public void onTestStart(ITestResult result) {
+ iResultListener2.onTestStart(result);
+ }
+
+ @Override
+ public void onTestSuccess(ITestResult result) {
+ iResultListener2.onTestSuccess(result);
+ }
+
+ @Override
+ public void onTestFailure(ITestResult result) {
+ iResultListener2.onTestFailure(result);
+ }
+
+ @Override
+ public void onTestSkipped(ITestResult result) {
+ iResultListener2.onTestSkipped(result);
+ }
+
+ @Override
+ public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
+ iResultListener2.onTestFailedButWithinSuccessPercentage(result);
+ }
+
+ @Override
+ public void onStart(ITestContext context) {
+ iResultListener2.onStart(context);
+ }
+
+ @Override
+ public void onFinish(ITestContext context) {
+ iResultListener2.onFinish(context);
+ }
+
+
+ private static Object createReportPortalListener() {
+ try {
+ final Class<?> classToLoad = Class.forName(CLASSNAME_REPORT_PORTAL_LISTENER,
+ true, ReportPortalListenerDelegator.class.getClassLoader());
+ return classToLoad.getConstructor().newInstance();
+ } catch (ClassNotFoundException e) {
+ // Fallback to NullInvoker
+ final Class[] classes = {IExecutionListener.class, ISuiteListener.class, IResultListener2.class};
+ final ProxyFactory proxyFactory = new JavassistProxyFactory();
+
+ return proxyFactory.createInvokerProxy(new NullInvoker(), classes);
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static Object createScreenshotsProvider(WebDriver driver) throws ReflectiveOperationException {
+ Class<?> classToLoad = Class.forName(CLASSNAME_WEB_DRIVER_SCREENSHOTS_PROVIDER,
+ true, driver.getClass().getClassLoader());
+
+ return classToLoad.getDeclaredConstructor(WebDriver.class).newInstance(driver);
+ }
+
+}