Modified: ofbiz/ofbiz-framework/trunk/framework/testtools/src/main/java/org/apache/ofbiz/testtools/TestRunContainer.java URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/testtools/src/main/java/org/apache/ofbiz/testtools/TestRunContainer.java?rev=1805947&r1=1805946&r2=1805947&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/framework/testtools/src/main/java/org/apache/ofbiz/testtools/TestRunContainer.java (original) +++ ofbiz/ofbiz-framework/trunk/framework/testtools/src/main/java/org/apache/ofbiz/testtools/TestRunContainer.java Wed Aug 23 18:56:15 2017 @@ -29,10 +29,9 @@ import java.util.Map; import org.apache.ofbiz.base.container.Container; import org.apache.ofbiz.base.container.ContainerException; -import org.apache.ofbiz.base.container.StartupCommandToArgsAdapter; import org.apache.ofbiz.base.start.StartupCommand; +import org.apache.ofbiz.base.start.StartupCommandUtil; import org.apache.ofbiz.base.util.Debug; -import org.apache.ofbiz.entity.Delegator; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.taskdefs.optional.junit.JUnitTest; import org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter; @@ -53,146 +52,48 @@ public class TestRunContainer implements public static final String module = TestRunContainer.class.getName(); public static final String logDir = "runtime/logs/test-results/"; - protected String configFile = null; - protected String component = null; - protected String suiteName = null; - protected String testCase = null; - protected String logLevel = null; - private String name; + private JunitSuiteWrapper jsWrapper; @Override - public void init(List<StartupCommand> ofbizCommands, String name, String configFile) { - // TODO: remove this hack and provide clean implementation - String[] args = StartupCommandToArgsAdapter.adaptStartupCommandsToLoaderArgs(ofbizCommands); - + public void init(List<StartupCommand> ofbizCommands, String name, String configFile) throws ContainerException { this.name = name; - this.configFile = configFile; - if (args != null) { - for (String argument : args) { - // arguments can prefix w/ a '-'. Just strip them off - if (argument.startsWith("-")) { - int subIdx = 1; - if (argument.startsWith("--")) { - subIdx = 2; - } - argument = argument.substring(subIdx); - } - - // parse the arguments - if (argument.indexOf("=") != -1) { - String argumentName = argument.substring(0, argument.indexOf("=")); - String argumentVal = argument.substring(argument.indexOf("=") + 1); - - if ("component".equalsIgnoreCase(argumentName)) { - this.component = argumentVal; - } - if ("suitename".equalsIgnoreCase(argumentName)) { - this.suiteName = argumentVal; - } - if ("case".equalsIgnoreCase(argumentName)) { - this.testCase = argumentVal; - } - if ("loglevel".equalsIgnoreCase(argumentName)) { - this.logLevel = argumentVal; - } - } - } - } - - // make sure the log dir exists - File dir = new File(logDir); - if (!dir.exists()) - dir.mkdir(); - } + new File(logDir).mkdir(); - public boolean start() throws ContainerException { - // configure log4j output logging - if (logLevel != null) { - int llevel = Debug.getLevelFromString(logLevel); + // get the test properties passed by the user in the command line + Map<String, String> testProps = ofbizCommands.stream() + .filter(command -> command.getName().equals(StartupCommandUtil.StartupOption.TEST.getName())) + .map(command -> command.getProperties()) + .findFirst().get(); - for (int v = 0; v < 9; v++) { - if (v < llevel) { - Debug.set(v, false); - } else { - Debug.set(v, true); - } - } - } + // set selected log level if passed by user + setLoggerLevel(testProps.get("loglevel")); - // get the tests to run - JunitSuiteWrapper jsWrapper = new JunitSuiteWrapper(component, suiteName, testCase); - if (jsWrapper.getAllTestList().size() == 0) { - throw new ContainerException("No tests found (" + component + " / " + suiteName + " / " + testCase + ")"); - } + this.jsWrapper = prepareJunitSuiteWrapper(testProps); + } + public boolean start() throws ContainerException { boolean failedRun = false; for (ModelTestSuite modelSuite: jsWrapper.getModelTestSuites()) { - Delegator testDelegator = modelSuite.getDelegator(); - TestSuite suite = modelSuite.makeTestSuite(); - JUnitTest test = new JUnitTest(); - test.setName(suite.getName()); - // create the XML logger - JunitXmlListener xml; - try { - xml = new JunitXmlListener(new FileOutputStream(logDir + suite.getName() + ".xml")); - } catch (FileNotFoundException e) { - throw new ContainerException(e); - } - - // per-suite results + // prepare + TestSuite suite = modelSuite.makeTestSuite(); + JUnitTest test = new JUnitTest(suite.getName()); + JunitXmlListener xml = createJunitXmlListener(suite, logDir); TestResult results = new TestResult(); results.addListener(new JunitListener()); results.addListener(xml); - // add the suite to the xml listener + // test xml.startTestSuite(test); - // run the tests suite.run(results); test.setCounts(results.runCount(), results.failureCount(), results.errorCount()); - // rollback all entity operations performed by the delegator - testDelegator.rollback(); + modelSuite.getDelegator().rollback(); // rollback all entity operations xml.endTestSuite(test); - if (!results.wasSuccessful()) { - failedRun = true; - } + logTestSuiteResults(suite, results); - // display the results - Debug.logInfo("[JUNIT] Results for test suite: " + suite.getName(), module); - Debug.logInfo("[JUNIT] Pass: " + results.wasSuccessful() + " | # Tests: " + results.runCount() + " | # Failed: " + - results.failureCount() + " # Errors: " + results.errorCount(), module); - if (Debug.importantOn() && !results.wasSuccessful()) { - Debug.logInfo("[JUNIT] ----------------------------- ERRORS ----------------------------- [JUNIT]", module); - Enumeration<?> err = results.errors(); - if (!err.hasMoreElements()) { - Debug.logInfo("None", module); - } else { - while (err.hasMoreElements()) { - Object error = err.nextElement(); - Debug.logInfo("--> " + error, module); - if (error instanceof TestFailure) { - Debug.logInfo(((TestFailure) error).trace(), module); - } - } - } - Debug.logInfo("[JUNIT] ------------------------------------------------------------------ [JUNIT]", module); - Debug.logInfo("[JUNIT] ---------------------------- FAILURES ---------------------------- [JUNIT]", module); - Enumeration<?> fail = results.failures(); - if (!fail.hasMoreElements()) { - Debug.logInfo("None", module); - } else { - while (fail.hasMoreElements()) { - Object failure = fail.nextElement(); - Debug.logInfo("--> " + failure, module); - if (failure instanceof TestFailure) { - Debug.logInfo(((TestFailure) failure).trace(), module); - } - } - } - Debug.logInfo("[JUNIT] ------------------------------------------------------------------ [JUNIT]", module); - } + failedRun = !results.wasSuccessful() ? true : failedRun; } if (failedRun) { @@ -208,6 +109,65 @@ public class TestRunContainer implements return name; } + private void setLoggerLevel(String logLevel) { + if (logLevel != null) { + int selectedLogLevel = Debug.getLevelFromString(logLevel); + + for(int level = Debug.ALWAYS; level <= Debug.FATAL; level++) { + boolean isOn = level >= selectedLogLevel; + Debug.set(level, isOn); + } + } + } + + private JunitSuiteWrapper prepareJunitSuiteWrapper(Map<String,String> testProps) throws ContainerException { + String component = testProps.get("component"); + String suiteName = testProps.get("suitename"); + String testCase = testProps.get("case"); + + JunitSuiteWrapper jsWrapper = new JunitSuiteWrapper(component, suiteName, testCase); + if (jsWrapper.getAllTestList().size() == 0) { + throw new ContainerException("No tests found (" + component + " / " + suiteName + " / " + testCase + ")"); + } + + return jsWrapper; + } + + private JunitXmlListener createJunitXmlListener(TestSuite suite, String logDir) throws ContainerException { + try { + return new JunitXmlListener(new FileOutputStream(logDir + suite.getName() + ".xml")); + } catch (FileNotFoundException e) { + throw new ContainerException(e); + } + } + + private void logTestSuiteResults(TestSuite suite, TestResult results) { + Debug.logInfo("[JUNIT] Results for test suite: " + suite.getName(), module); + Debug.logInfo("[JUNIT] Pass: " + results.wasSuccessful() + " | # Tests: " + results.runCount() + " | # Failed: " + + results.failureCount() + " # Errors: " + results.errorCount(), module); + if (Debug.importantOn() && !results.wasSuccessful()) { + Debug.logInfo("[JUNIT] ----------------------------- ERRORS ----------------------------- [JUNIT]", module); + logErrorsOrFailures(results.errors()); + Debug.logInfo("[JUNIT] ------------------------------------------------------------------ [JUNIT]", module); + + Debug.logInfo("[JUNIT] ---------------------------- FAILURES ---------------------------- [JUNIT]", module); + logErrorsOrFailures(results.failures()); + Debug.logInfo("[JUNIT] ------------------------------------------------------------------ [JUNIT]", module); + } + } + + private void logErrorsOrFailures(Enumeration<TestFailure> errorsOrFailures) { + if (!errorsOrFailures.hasMoreElements()) { + Debug.logInfo("None", module); + } else { + while (errorsOrFailures.hasMoreElements()) { + TestFailure testFailure = errorsOrFailures.nextElement(); + Debug.logInfo("--> " + testFailure, module); + Debug.logInfo(testFailure.trace(), module); + } + } + } + class JunitXmlListener extends XMLJUnitResultFormatter { Map<String, Long> startTimes = new HashMap<String, Long>();