aboutsummaryrefslogtreecommitdiffstats
path: root/asdc-tests/src/main/java/org/openecomp/sdc/ci/tests/run/StartTest2backup.java
diff options
context:
space:
mode:
Diffstat (limited to 'asdc-tests/src/main/java/org/openecomp/sdc/ci/tests/run/StartTest2backup.java')
-rw-r--r--asdc-tests/src/main/java/org/openecomp/sdc/ci/tests/run/StartTest2backup.java410
1 files changed, 410 insertions, 0 deletions
diff --git a/asdc-tests/src/main/java/org/openecomp/sdc/ci/tests/run/StartTest2backup.java b/asdc-tests/src/main/java/org/openecomp/sdc/ci/tests/run/StartTest2backup.java
new file mode 100644
index 0000000000..bab5afaa08
--- /dev/null
+++ b/asdc-tests/src/main/java/org/openecomp/sdc/ci/tests/run/StartTest2backup.java
@@ -0,0 +1,410 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.run;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import org.apache.log4j.PropertyConfigurator;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Result;
+import org.junit.runner.notification.Failure;
+import org.openecomp.sdc.ci.tests.api.SdcTest;
+import org.openecomp.sdc.ci.tests.config.Config;
+import org.openecomp.sdc.ci.tests.utils.Utils;
+import org.openecomp.sdc.ci.tests.utils.general.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class StartTest2backup {
+
+ private List<Class<? extends SdcTest>> testClasses = new ArrayList<Class<? extends SdcTest>>();
+ public static long timeOfTest = 0;
+
+ public static boolean debug = false;
+
+ public static AtomicBoolean loggerInitialized = new AtomicBoolean(false);
+
+ protected static Logger logger = null;
+
+ public static void main(String[] args) {
+
+ String debugEnabled = System.getProperty("debug");
+ if (debugEnabled != null && debugEnabled.equalsIgnoreCase("true")) {
+ debug = true;
+ }
+ System.out.println("Debug mode is " + (debug ? "enabled" : "disabled"));
+
+ enableLogger();
+
+ Config config = null;
+ try {
+ config = Utils.getConfig();
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ if (config == null) {
+ logger.error("Failed to configuration file of ci tests.");
+ System.exit(1);
+ }
+
+ List<String> packagesToRun = config.getPackages();
+ if (packagesToRun == null || true == packagesToRun.isEmpty()) {
+ logger.error("No package was configured to be executed.");
+ System.exit(2);
+ }
+ StartTest2backup tests = new StartTest2backup();
+
+ boolean stopOnClassFailure = false;
+ String stopOnClassFailureStr = System.getProperty("stopOnClassFailure");
+ if (stopOnClassFailureStr != null && stopOnClassFailureStr.equalsIgnoreCase("true")) {
+ stopOnClassFailure = true;
+ } else {
+ Boolean stopOnClassFailureObj = config.isStopOnClassFailure();
+ if (stopOnClassFailureObj != null) {
+ stopOnClassFailure = stopOnClassFailureObj.booleanValue();
+ }
+ }
+
+ tests.start(packagesToRun, stopOnClassFailure);
+ }
+
+ public StartTest2backup() {
+ logger = LoggerFactory.getLogger(StartTest2backup.class.getName());
+ }
+
+ public static void enableLogger() {
+
+ if (false == loggerInitialized.get()) {
+
+ loggerInitialized.set(true);
+
+ String log4jPropsFile = System.getProperty("log4j.configuration");
+ if (System.getProperty("os.name").contains("Windows")) {
+ String logProps = "src/main/resources/ci/conf/log4j.properties";
+ if (log4jPropsFile == null) {
+ System.setProperty("targetlog", "target/");
+ log4jPropsFile = logProps;
+ }
+
+ }
+ PropertyConfigurator.configureAndWatch(log4jPropsFile);
+
+ }
+ }
+
+ public void start(List<String> packages, boolean exitOnFailure) {
+
+ boolean success = true;
+ StringBuilder results = new StringBuilder();
+ Result result;
+
+ if (packages == null) {
+ return;
+ }
+
+ for (String packageName : packages) {
+ // List<Class> classesForPackage =
+ // getClassesForPackage("org.openecomp.sdc.ci.tests.execute");
+ List<Class> classesForPackage = getClassesForPackage(packageName);
+ if (classesForPackage != null && false == classesForPackage.isEmpty()) {
+ for (Class testUnit : classesForPackage) {
+ testClasses.add(testUnit);
+ }
+ }
+ }
+
+ System.out.println(testClasses);
+
+ // tsetClasses.add(LogValidatorTest.class);
+ // tsetClasses.add(AttNorthboundTest.class);
+
+ results.append(
+ "<Html><head><style>th{background-color: gray;color: white;height: 30px;}td {color: black;height: 30px;}.fail {background-color: #FF5555;width: 100px;text-align: center;}.success {background-color: #00FF00;width: 100px;text-align: center;}.name {width: 200px;background-color: #F0F0F0;}.message {width: 300px;background-color: #F0F0F0;}</style></head><body>");
+
+ Calendar calendar = Calendar.getInstance();
+ timeOfTest = calendar.getTimeInMillis();
+ SimpleDateFormat date_format = new SimpleDateFormat("MMM dd yyyy HH:mm:ss");
+ results.append("<br/><h2> This report generated on " + date_format.format(calendar.getTime()) + "</h2><br/>");
+
+ results.append("<table>");
+ addTableHead(results);
+
+ int size = testClasses.size();
+ int index = 0;
+
+ int totalRunTests = 0;
+ int totalFailureTests = 0;
+ int totalIgnoreTests = 0;
+ int numOfFailureClasses = 0;
+ for (Class<? extends SdcTest> testClass : testClasses) {
+
+ index++;
+
+ StringBuilder builder = new StringBuilder();
+ String str = "***************************************************************************";
+ builder.append(str + "\n");
+ String current = "class " + index + "/" + size + " failure(" + numOfFailureClasses + ") + RUNS("
+ + totalRunTests + ")" + " FAILURES(" + totalFailureTests + ") IGNORED(" + totalIgnoreTests + ")";
+ int interval = ((str.length() - current.length() - 2) / 2);
+ String substring = str.substring(0, interval);
+ builder.append(substring + " " + current + " " + substring + "\n");
+ builder.append(str + "\n");
+
+ System.out.println(builder.toString());
+
+ logger.debug(builder.toString());
+ logger.debug("Going to run test class {}", testClass.getName());
+
+ result = JUnitCore.runClasses(testClass);
+ if (result.wasSuccessful() == false) {
+ numOfFailureClasses++;
+ }
+ logger.debug("Test class {} finished {}", testClass.getName(), (result.wasSuccessful() ? "OK." : " WITH ERROR."));
+ List<Failure> failures = result.getFailures();
+ if (failures != null) {
+ for (Failure failure : failures) {
+ logger.error("Test class " + testClass.getName() + " failure test " + failure.getTestHeader() + "-"
+ + failure.getTrace());
+ }
+ }
+ int runsPerClass = result.getRunCount();
+ int failuresPerClass = result.getFailureCount();
+ int ignoredPerClass = result.getIgnoreCount();
+
+ totalRunTests += runsPerClass;
+ totalFailureTests += failuresPerClass;
+ totalIgnoreTests += ignoredPerClass;
+
+ logger.debug("class {} failed tests: {}", testClass.getName(), (failuresPerClass * 1.0) / runsPerClass * 100 + " %");
+ logger.debug("class {} ignored tests: {}", testClass.getName(), (ignoredPerClass * 1.0) / runsPerClass * 100 + " %");
+
+ // List<Failure> failures = result.getFailures();
+ // if (failures != null) {
+ // for (Failure failure : failures) {
+ // System.err.println("9999999999" + failure.getTestHeader());
+ // }
+ // }
+
+ addUnitTestResult(results, testClass, result);
+ success &= result.wasSuccessful();
+
+ if (numOfFailureClasses > 0) {
+ // if (exitOnFailure) {
+ if (exitOnFailure) {
+ break;
+ }
+ }
+ }
+
+ results.append("</table>");
+ results.append("<br/><h2> Tests Summary: </h2><br/>");
+ results.append("Total Runs : " + totalRunTests + "<br/>");
+ results.append("Total Failure : " + totalFailureTests + "<br/>");
+ results.append("Total: " + totalFailureTests + "/" + totalRunTests + "<br/>");
+ results.append("</html>");
+
+ FileUtils.writeToFile(Config.instance().getOutputFolder() + File.separator + Config.instance().getReportName(),
+ results.toString());
+
+ if (!success) {
+ System.out.println("FAILURE");
+ logger.error("Failure tests : "
+ + ((totalFailureTests + totalIgnoreTests) * 1.0) / (totalRunTests + totalIgnoreTests) + " %");
+ logger.error("Ignored tests : " + (totalIgnoreTests * 1.0) / (totalRunTests + totalIgnoreTests) + " %");
+ System.exit(1);
+ }
+
+ System.out.println("SUCCESS");
+ }
+
+ private List<Class> getClassesForPackage(String pkgname) {
+
+ List<Class> classes = new ArrayList<Class>();
+
+ // Get a File object for the package
+ File directory = null;
+ String fullPath;
+ String relPath = pkgname.replace('.', '/');
+
+ // System.out.println("ClassDiscovery: Package: " + pkgname +
+ // " becomes Path:" + relPath);
+
+ URL resource = ClassLoader.getSystemClassLoader().getResource(relPath);
+
+ // System.out.println("ClassDiscovery: Resource = " + resource);
+ if (resource == null) {
+ throw new RuntimeException("No resource for " + relPath);
+ }
+ fullPath = resource.getFile();
+ // System.out.println("ClassDiscovery: FullPath = " + resource);
+
+ if (debug) {
+ System.out.println("fullPath is " + fullPath);
+ }
+
+ try {
+ directory = new File(resource.toURI());
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(
+ pkgname + " (" + resource
+ + ") does not appear to be a valid URL / URI. Strange, since we got it from the system...",
+ e);
+ } catch (IllegalArgumentException e) {
+ directory = null;
+ }
+ // System.out.println("ClassDiscovery: Directory = " + directory);
+
+ if (directory != null && directory.exists()) {
+
+ // Get the list of the files contained in the package
+ String[] files = directory.list();
+ for (int i = 0; i < files.length; i++) {
+
+ // we are only interested in .class files
+ if (files[i].endsWith(".class") && false == files[i].contains("$")) {
+
+ // removes the .class extension
+ String className = pkgname + '.' + files[i].substring(0, files[i].length() - 6);
+
+ // System.out.println("ClassDiscovery: className = " +
+ // className);
+
+ if (debug) {
+ System.out.println("ClassDiscovery: className = " + className);
+ }
+
+ try {
+ Class clas = Class.forName(className);
+ boolean isAddToRun = false;
+ Method[] methods = clas.getMethods();
+ for (Method method : methods) {
+ Annotation[] anns = method.getAnnotations();
+ for (Annotation an : anns) {
+ if (an.annotationType().getSimpleName().equalsIgnoreCase("Test")) {
+ isAddToRun = true;
+ break;
+ }
+ }
+ }
+ if (isAddToRun)
+ classes.add(clas);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("ClassNotFoundException loading " + className);
+ }
+ }
+ }
+ } else {
+ try {
+ String jarPath = fullPath.replaceFirst("[.]jar[!].*", ".jar").replaceFirst("file:", "");
+
+ if (debug) {
+ System.out.println("jarPath is " + jarPath);
+ }
+
+ JarFile jarFile = new JarFile(jarPath);
+ Enumeration<JarEntry> entries = jarFile.entries();
+ while (entries.hasMoreElements()) {
+ JarEntry entry = entries.nextElement();
+ String entryName = entry.getName();
+ if (entryName.startsWith(relPath) && entryName.length() > (relPath.length() + "/".length())) {
+
+ // System.out.println("ClassDiscovery: JarEntry: " +
+ // entryName);
+ String className = entryName.replace('/', '.').replace('\\', '.').replace(".class", "");
+
+ // System.out.println("ClassDiscovery: className = " +
+ // className);
+
+ if (false == className.contains("$")) {
+
+ if (debug) {
+ System.out.println("ClassDiscovery: className = " + className);
+ }
+
+ try {
+ Class clas = Class.forName(className);
+ boolean isAddToRun = false;
+ Method[] methods = clas.getMethods();
+ for (Method method : methods) {
+ Annotation[] anns = method.getAnnotations();
+ for (Annotation an : anns) {
+ if (an.annotationType().getSimpleName().equalsIgnoreCase("Test")) {
+ isAddToRun = true;
+ break;
+ }
+ }
+ }
+ if (isAddToRun)
+ classes.add(clas);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("ClassNotFoundException loading " + className);
+ }
+ }
+ }
+ }
+ jarFile.close();
+
+ } catch (IOException e) {
+ throw new RuntimeException(pkgname + " (" + directory + ") does not appear to be a valid package", e);
+ }
+ }
+ return classes;
+ }
+
+ private void addTableHead(StringBuilder results) {
+ results.append("<tr>");
+ results.append("<th>").append("Unit Test").append("</th>");
+ results.append("<th>").append("Result").append("</th>");
+ results.append("</tr>");
+ }
+
+ private void addUnitTestResult(StringBuilder results, Class<? extends SdcTest> testClass,
+ Result unitTestResult) {
+
+ boolean isSuccess = unitTestResult.wasSuccessful();
+
+ String result = (isSuccess) ? "success" : "fail";
+ String fileName = FileUtils.getFileName(testClass.getName());
+ results.append("<tr>");
+ // results.append("<td>").append(FileUtils.getFileName(testClass.getName())).append("</td>");
+ results.append("<td class=\"name\">")
+ .append("<a href=\"" + fileName + timeOfTest + ".html\">" + fileName + "</a>").append("</td>");
+ results.append("<td class=\"" + result + "\">").append(result).append("</td>");
+ results.append("</tr>");
+ }
+
+}