import org.simantics.scl.osgi.internal.Activator;
import org.simantics.scl.osgi.internal.ServiceBasedModuleSourceRepository;
import org.simantics.scl.osgi.internal.ServiceBasedTestRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import gnu.trove.map.hash.THashMap;
/**
* Utilizies {@link TestRepository} for collecting SCL tests from bundles
*
- * @author Jani
- *
+ * @author Jani Simomaa
*/
public class SCLScriptTestBase extends FreshDatabaseTest {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SCLScriptTestBase.class);
+
private Map<String, TestRunnable> testRunnables = new THashMap<String, TestRunnable>();
-
+
@Rule public TestName testName = new TestName();
-
+
/**
* Constructor that initially searches for all SCL test scripts and stores
* them into a Map for later access
testRunnables.put(runnable.getName(), runnable);
}
}
-
+
/**
* Simplest method for running a SCL test
*/
protected void test() {
test(-1);
}
-
+
/**
* Executes a test case with given timeout as seconds. When time runs out one
* can assume a deadlock has happened. The process is killed after the timeout
protected void test(int timeout) {
testImpl(timeout);
}
-
+
/**
* Executes a test case with given timeout as seconds
*
SCLOsgi.SOURCE_REPOSITORY = new ServiceBasedModuleSourceRepository(Activator.getContext());
SCLOsgi.MODULE_REPOSITORY = new ModuleRepository(SCLOsgi.SOURCE_REPOSITORY);
SCLOsgi.TEST_REPOSITORY = new ServiceBasedTestRepository(Activator.getContext());
-
+
String testName = resolveTestName();
TestRunnable runnable = testRunnables.get(testName);
-
+
if (timeout > -1) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
+ LOGGER.info("Watchdog will kill this test process because it has been executing for over {} seconds", timeout); //$NON-NLS-1$
String processName = ManagementFactory.getRuntimeMXBean().getName();
- System.out.println("PID: " + processName);
+ LOGGER.info("Test Process Name: {}", processName); //$NON-NLS-1$
String PID = processName.split("@")[0];
String command = "taskkill /F /PID " + PID;
- System.out.println("Command: " + command);
+ LOGGER.info("Running command to kill test process: {}", command); //$NON-NLS-1$
try {
Runtime.getRuntime().exec(command);
} catch (IOException e) {
- e.printStackTrace();
+ LOGGER.error("Failed to kill process that ran over its execution time limit of {} seconds", timeout, e);
}
}
try {
runnable.run();
} catch (Exception e) {
- e.printStackTrace();
+ LOGGER.error("Failed to run test {} runnable {}", testName, runnable, e);
} finally {
timer.cancel();
}
try {
runnable.run();
} catch (Exception e) {
- e.printStackTrace();
+ LOGGER.error("Failed to run test {} runnable {}", testName, runnable, e);
}
}
}
-
+
/**
* Resolves the full test name based on the names of classes that extends this
* SCLScriptTestBase class.<br><br>