/**
* @Author Filipe Martins
* 18 Jun 2010
* OF-Interpreter
*/
package openfarm.transmission.ws.engine;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import openfarm.analysiscomponents.AnalysisComponent;
import openfarm.analysiscomponents.Parameterize;
import openfarm.analysiscomponents.template.properties.ACTemplateProperties;
import openfarm.interpreter.InterpreterRegister;
import openfarm.jni.template.openfarmtemplates.CppTemplate;
import openfarm.jni.template.openfarmtemplates.JavaTemplate;
import openfarm.multithreading.machine.IJobThread;
import openfarm.multithreading.machine.Job;
import openfarm.properties.PropertiesReader;
import openfarm.transmission.ws.jobmonitoring.CurrentState;
import openfarm.transmission.ws.jobmonitoring.InterpreterJobState;
import openfarmtools.analysiscomponents.AnalysisComponentParameters;
import openfarmtools.interpreter.exceptions.AnalysisComponentNotFoundException;
import openfarmtools.interpreter.exceptions.InvalidParametersException;
import openfarmtools.interpreter.exceptions.InvalidRegisterConfigurationException;
import openfarmtools.interpreter.exceptions.MtMachineException;
import openfarmtools.interpreter.exceptions.TemplateException;
import openfarmtools.interpreter.exceptions.VideoFileNotFoundException;
import openfarmtools.interpreter.exceptions.XmlException;
import openfarmtools.repository.filehandling.EOperatingSystemProperties;
import org.dom4j.DocumentException;
import org.junit.Test;
public class TemplateInvocationEngineTest
{
private TemplateInvocationEngine engine;
private String [] materialList = {"video/vid1.avi"};
private Parameterize parameters = new Parameterize();
private String managerUrl = PropertiesReader.quickGetProperty("manager.url", "utresources/properties/test_properties.properties");
private static final String LIB_REPOSITORY = "C:\\openfarm\\libRepository\\";
public TemplateInvocationEngineTest() throws FileNotFoundException, XmlException, TemplateException, AnalysisComponentNotFoundException, IOException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, InvalidRegisterConfigurationException
{
InterpreterRegister.getInstance().reloadRegistry();
Set<String> materialExtensions = new HashSet<String>();
materialExtensions.add("avi");
Set<AnalysisComponentParameters> parameterConfig = new HashSet<AnalysisComponentParameters>();
parameterConfig.add(new AnalysisComponentParameters("firstNFrames","int","2000"));
parameterConfig.add(new AnalysisComponentParameters("threshold","float","0.6890"));
parameterConfig.add(new AnalysisComponentParameters("mock","String",""));
AnalysisComponent scd = new AnalysisComponent(1, "Scene Cut Detection", "libscenecutdetection",
"dll", "windows", "C++", materialExtensions,
new CppTemplate("libscenecutdetection",LIB_REPOSITORY), parameterConfig);
scd.setAcTemplateProperties(new ACTemplateProperties("CppTemplate", "default","", new HashMap<String,String>()));
AnalysisComponent jd = new AnalysisComponent(2, "Java Mock Detector", "AcTest",
"class", "windows", "Java", materialExtensions,
new JavaTemplate("AcTest",LIB_REPOSITORY,"xpto.template.AcTest"), parameterConfig);
jd.setAcTemplateProperties(new ACTemplateProperties("JavaTemplate", "default","", new HashMap<String,String>()));
InterpreterRegister.getInstance().getRegisteredAnalysisComponents().clear();
InterpreterRegister.getInstance().getRegisteredAnalysisComponents().add(scd);
InterpreterRegister.getInstance().getRegisteredAnalysisComponents().add(jd);
InterpreterRegister.setId("MockInterpreterId_112233");
InterpreterRegister.getInstance().getInp().setManagerUrl(managerUrl);
engine = new TemplateInvocationEngine(InterpreterRegister.getInstance());
parameters.getParams().put("firstNFrames", "3000");
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#TemplateInvocationEngine(openfarm.interpreter.InterpreterRegister)}.
*/
@Test
public void testTemplateInvocationEngine()
{
assertNotNull(engine);
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#getInterpreterId()}.
*/
@Test
public void testGetInterpreterId()
{
assertEquals(InterpreterRegister.getId(), engine.getInterpreterId());
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#analysisComponentsDescription()}.
* @throws DocumentException
* @throws IOException
*/
@Test
public void testAnalysisComponentsDescription() throws DocumentException, IOException
{
String result = engine.analysisComponentsDescription();
FileInputStream fin = new FileInputStream(new File("utresources/generatedmetadata/mock_idx.xml"));
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
String temp;
String expected = "";
boolean ignore = false;
while((temp=br.readLine())!=null)
{
expected+=temp;
if(!ignore)
{
expected+="\n";
ignore=true;
}
}
System.out.println(result);
assertEquals(expected, result);
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#isInterpreterJobGroupCompleted(java.lang.String)}.
* @throws IOException
* @throws MtMachineException
* @throws InvalidParametersException
* @throws AnalysisComponentNotFoundException
* @throws VideoFileNotFoundException
* @throws NoSuchFieldException
* @throws SecurityException
* @throws IllegalAccessException
* @throws TemplateException
* @throws XmlException
* @throws IllegalArgumentException
* @throws InterruptedException
*/
@Test
public void testIsInterpreterJobGroupCompleted() throws Exception
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
assertFalse(engine.isInterpreterJobGroupCompleted(jobGroup));
Thread.sleep(2000);
engine.abortAll();
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#isInterpreterSingleJobRunning(java.lang.String)}.
* @throws NoSuchFieldException
* @throws SecurityException
* @throws IOException
* @throws IllegalAccessException
* @throws AnalysisComponentNotFoundException
* @throws TemplateException
* @throws XmlException
* @throws FileNotFoundException
* @throws IllegalArgumentException
* @throws MtMachineException
* @throws InvalidParametersException
* @throws VideoFileNotFoundException
* @throws InterruptedException
* @throws InvalidRegisterConfigurationException
*/
@Test
public void testIsInterpreterSingleJobRunning() throws SecurityException, NoSuchFieldException, IllegalArgumentException, FileNotFoundException, XmlException, TemplateException, AnalysisComponentNotFoundException, IllegalAccessException, IOException, VideoFileNotFoundException, InvalidParametersException, MtMachineException, InterruptedException, InvalidRegisterConfigurationException
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
Map<String,IJobThread> map = engine.getMtMachine().getJobGroupMap().get(jobGroup);
for(String key : map.keySet())
assertTrue(engine.isInterpreterSingleJobRunning(key));
Thread.sleep(2000);
engine.abortAll();
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#getInterpreterJobDetails(java.lang.String)}.
* @throws InterruptedException
*/
@Test
public void testGetInterpreterJobDetails() throws Exception
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
Job [] job = engine.getInterpreterJobDetails(jobGroup);
assertEquals(1, job.length);
assertEquals("RIDDICK",job[0].getInterpreterName());
assertEquals("video/vid1.avi",job[0].getVideoFile());
assertEquals("Scene Cut Detection",job[0].getAnalysisComponent().getName());
assertEquals(EOperatingSystemProperties.WINDOWS,job[0].getAnalysisComponent().getOs());
Thread.sleep(2000);
engine.abortAll();
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#invokeAnalysis(java.lang.String, java.lang.String[], openfarm.analysiscomponents.Parameterize)}.
* @throws InterruptedException
*/
@Test
public void testInvokeAnalysis() throws Exception
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
Thread.sleep(1000);
Map<String,IJobThread> map = engine.getMtMachine().getJobGroupMap().get(jobGroup);
for(String key : map.keySet())
{
IJobThread t = map.get(key);
assertFalse(t.getTemplate().isDone());
assertFalse(t.getTemplate().isStopped());
}
Thread.sleep(1000);
engine.abortAll();
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#abortAll()}.
*/
@Test
public void testAbortAll() throws Exception
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
Thread.sleep(1000);
Map<String,IJobThread> map = engine.getMtMachine().getJobGroupMap().get(jobGroup);
for(String key : map.keySet())
{
IJobThread t = map.get(key);
assertFalse(t.getTemplate().isDone());
assertFalse(t.getTemplate().isStopped());
}
Thread.sleep(1000);
engine.abortAll();
Thread.sleep(500);
for(String key : map.keySet())
{
IJobThread t = map.get(key);
assertTrue(t.getTemplate().isDone());
assertTrue(t.getTemplate().isStopped());
}
//Teste Java plug-in
jobGroup = engine.invokeAnalysis("Java Mock Detector", materialList, parameters);
Thread.sleep(1000);
map = engine.getMtMachine().getJobGroupMap().get(jobGroup);
Thread.sleep(1000);
engine.abortAll();
Thread.sleep(500);
for(String key : map.keySet())
{
IJobThread t = map.get(key);
assertTrue(t.getTemplate().isDone());
assertTrue(t.getTemplate().isStopped());
}
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#jobCurrentInterpreterState(java.lang.String)}.
* @throws NoSuchFieldException
* @throws SecurityException
*/
@Test
public void testJobCurrentInterpreterState() throws Exception
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
Thread.sleep(1000);
Map<String,IJobThread> map = engine.getMtMachine().getJobGroupMap().get(jobGroup);
for(String key : map.keySet())
{
assertEquals(CurrentState.RUNNING, engine.jobCurrentInterpreterState(key));
}
Thread.sleep(1000);
engine.abortAll();
for(String key : map.keySet())
{
assertEquals(CurrentState.CANCELED, engine.jobCurrentInterpreterState(key));
}
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#interpreterStatus()}.
*/
@Test
public void testInterpreterStatus() throws Exception
{
InterpreterJobState ij = engine.interpreterStatus();
assertEquals(0, ij.getJobsRunning().size());
assertEquals(0, ij.getJobsCanceled().size());
assertEquals(0, ij.getJobsDone().size());
InterpreterRegister.getInstance().setRootRepository("utresources");
engine.invokeAnalysis("scene cut detection", materialList, parameters);
Thread.sleep(1000);
ij = engine.interpreterStatus();
assertEquals(1, ij.getJobsRunning().size());
assertEquals(0, ij.getJobsCanceled().size());
assertEquals(0, ij.getJobsDone().size());
Thread.sleep(2000);
engine.abortAll();
ij = engine.interpreterStatus();
assertEquals(0, ij.getJobsRunning().size());
assertEquals(1, ij.getJobsCanceled().size());
assertEquals(0, ij.getJobsDone().size());
String jobGroupId = engine.invokeAnalysis("scene cut detection", materialList, parameters);
while(!engine.isInterpreterJobGroupCompleted(jobGroupId))
{
Thread.sleep(500);
}
ij = engine.interpreterStatus();
assertEquals(0, ij.getJobsRunning().size());
assertEquals(1, ij.getJobsCanceled().size());
assertEquals(1, ij.getJobsDone().size());
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#stopJobGroup(java.lang.String)}.
*/
@Test
public void testStopJobGroup() throws Exception
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
Thread.sleep(1000);
engine.stopJobGroup(jobGroup);
Thread.sleep(500);
assertTrue(engine.isInterpreterJobGroupCompleted(jobGroup));
jobGroup = engine.invokeAnalysis("Java Mock Detector", materialList, parameters);
Thread.sleep(1000);
engine.stopJobGroup(jobGroup);
Thread.sleep(500);
assertTrue(engine.isInterpreterJobGroupCompleted(jobGroup));
engine.abortAll();
}
/**
* Test method for {@link openfarm.transmission.ws.engine.TemplateInvocationEngine#stopSingleJob(java.lang.String)}.
*/
@Test
public void testStopSingleJob() throws Exception
{
InterpreterRegister.getInstance().setRootRepository("utresources");
String jobGroup = engine.invokeAnalysis("scene cut detection", materialList, parameters);
Thread.sleep(1000);
Map<String,IJobThread> map = engine.getMtMachine().getJobGroupMap().get(jobGroup);
for(String key : map.keySet())
{
engine.stopSingleJob(key);
}
assertTrue(engine.isInterpreterJobGroupCompleted(jobGroup));
Thread.sleep(500);
//test Java Detector
jobGroup = engine.invokeAnalysis("Java Mock Detector", materialList, parameters);
Thread.sleep(1000);
map = engine.getMtMachine().getJobGroupMap().get(jobGroup);
for(String key : map.keySet())
{
engine.stopSingleJob(key);
}
assertTrue(engine.isInterpreterJobGroupCompleted(jobGroup));
Thread.sleep(500);
engine.abortAll();
}
}
|