aboutsummaryrefslogtreecommitdiffstats
path: root/vid-automation/src/main/java
diff options
context:
space:
mode:
authorIttay Stern <ittay.stern@att.com>2019-07-17 18:02:48 +0300
committerIttay Stern <ittay.stern@att.com>2019-07-17 18:06:43 +0300
commitdb98c7976e57f8bacbcc93b802b4d05b1db7b8cf (patch)
treebba7b3205637c2dc8865599b24616ecccc6a199a /vid-automation/src/main/java
parent5f9fd8e2506de6ce7dc27d0fba009724e440f15d (diff)
Let API tests run without report_portal_integration, using dynamic loading
- Removed @Step annotations, as pointcut is hardcoded in com.att->   .automation.common.report_portal_integration.aspects.StepAspects - Introduced ReportPortalListenerDelegator that loads com.att->   .automation.common.report_portal_integration if available - Optimized and organized dependencies - Upgrade maven-assembly-plugin to resolve "Java heap space" error. Issue-ID: VID-378 Change-Id: Iaf9279a48a1474d0ef6d0f514259dd383f6f5dbf Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-automation/src/main/java')
-rw-r--r--vid-automation/src/main/java/org/onap/vid/api/BaseApiTest.java3
-rw-r--r--vid-automation/src/main/java/vid/automation/reportportal/ReportPortalListenerDelegator.java147
-rw-r--r--vid-automation/src/main/java/vid/automation/test/test/VidBaseTestCase.java5
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();