diff options
Diffstat (limited to 'vid-automation/src/main/java')
3 files changed, 152 insertions, 3 deletions
diff --git a/vid-automation/src/main/java/org/onap/vid/api/BaseApiTest.java b/vid-automation/src/main/java/org/onap/vid/api/BaseApiTest.java index 7ce29446c..3778e4b16 100644 --- a/vid-automation/src/main/java/org/onap/vid/api/BaseApiTest.java +++ b/vid-automation/src/main/java/org/onap/vid/api/BaseApiTest.java @@ -35,11 +35,12 @@ import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import org.testng.annotations.BeforeClass; import org.testng.annotations.Listeners; +import vid.automation.reportportal.ReportPortalListenerDelegator; import vid.automation.test.infra.FeaturesTogglingConfiguration; import vid.automation.test.services.UsersService; import vid.automation.test.utils.CookieAndJsonHttpHeadersInterceptor; -//@Listeners(ReportPortalListener.class) +@Listeners(ReportPortalListenerDelegator.class) public class BaseApiTest { protected static final Logger LOGGER = LogManager.getLogger(BaseApiTest.class); 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); + } + +} diff --git a/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java index ced874ee3..a45f25853 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java +++ b/vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java @@ -33,6 +33,7 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Listeners; import org.testng.annotations.Test; +import vid.automation.reportportal.ReportPortalListenerDelegator; import vid.automation.test.Constants; import vid.automation.test.Constants.ViewEdit; import vid.automation.test.infra.*; @@ -70,7 +71,7 @@ import static org.testng.AssertJUnit.fail; import static vid.automation.test.utils.TestHelper.GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS; import static vid.automation.test.utils.TestHelper.GET_TENANTS; -//@Listeners(com.automation.common.report_portal_integration.listeners.ReportPortalListener.class) +@Listeners(ReportPortalListenerDelegator.class) public class VidBaseTestCase extends SetupCDTest{ protected final UsersService usersService = new UsersService(); @@ -153,7 +154,7 @@ public class VidBaseTestCase extends SetupCDTest{ @BeforeSuite(alwaysRun = true) public void screenShotsForReportPortal(){ try { - //ReportPortalListener.setScreenShotsProvider(new WebDriverScreenshotsProvider(getDriver())); + ReportPortalListenerDelegator.setScreenShotsWebDriver(getDriver()); System.out.println("Called to ReportPortalListener to set ScreenShotsProvider"); } catch (Exception e) { e.printStackTrace(); |