/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.scripting;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.script.ScriptException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Ignore;
import org.junit.Test;
import org.python.jsr223.PyScriptEngine;
import org.python.jsr223.PyScriptEngineFactory;
/**
* Test producing a memory leak with Jython 2.5.2+ from: http://bugs.jython.org/issue2026.
*
* @author Doreen Seider
*/
public class ThreadLocalMemoryLeakTest {
/**
* Instantiates script engine objects using thread pool where thread local maps get recycled. Intended for manual testing only.
*
* @throws InterruptedException on error
*/
@Ignore
@Test
public void testScriptingLeakDetail() throws InterruptedException {
final Log log = LogFactory.getLog(ThreadLocalMemoryLeakTest.class);
ExecutorService pool = Executors.newSingleThreadExecutor();
int i = 0;
while (true) {
i++;
if (i % 10 == 0) {
log.debug("Iteration: " + i);
}
pool.submit(new Runnable() {
@Override
public void run() {
PyScriptEngineFactory factory = new PyScriptEngineFactory();
PyScriptEngine engine = (PyScriptEngine) factory.getScriptEngine();
try {
engine.eval("s = 'hello' + ' world'");
} catch (ScriptException e) {
log.error("script execution fails", e);
}
}
});
Thread.sleep(10);
}
}
}