/*
* YAQP - Yet Another QSAR Project:
* Machine Learning algorithms designed for the prediction of toxicological
* features of chemical compounds become available on the Web. Yaqp is developed
* under OpenTox (http://opentox.org) which is an FP7-funded EU research project.
* This project was developed at the Automatic Control Lab in the Chemical Engineering
* School of National Technical University of Athens. Please read README for more
* information.
*
* Copyright (C) 2009-2010 Pantelis Sopasakis & Charalampos Chomenides
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Contact:
* Pantelis Sopasakis
* chvng@mail.ntua.gr
* Address: Iroon Politechniou St. 9, Zografou, Athens Greece
* tel. +30 210 7723236
*/
package org.opentox.core.processors;
import java.sql.SQLException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opentox.core.exceptions.Cause;
import org.opentox.core.exceptions.YaqpException;
import org.opentox.core.interfaces.JMultiProcessorStatus.STATUS;
import org.opentox.db.exceptions.DuplicateKeyException;
import static org.junit.Assert.*;
/**
*
* @author chung
*/
public class PipelineTest {
// PROCESSOR 1
private Processor<String, String> p1 = new Processor<String, String>() {
public String process(String data) throws YaqpException {
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
throw new YaqpException();
}
return data + " <-- p1";
}
};
// PROCESSOR 2
private Processor<String, String> p2 = new Processor<String, String>() {
public String process(String data) throws YaqpException {
try {
Thread.sleep(80);
} catch (InterruptedException ex) {
throw new YaqpException();
}
return data + " <-- p2";
}
};
private Processor<String, String> p3 = new Processor<String, String>(){
public String process(String data) throws YaqpException {
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
throw new YaqpException();
}
throw new YaqpException();
}
};
private Processor buggy = new Processor(){
public Object process(Object data) throws YaqpException {
throw new DuplicateKeyException(Cause.XA1,"buggy",new SQLException());
}
};
public PipelineTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
System.err.println("Testing :"+Pipeline.class.getCanonicalName());
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void errorHandling(){
System.out.println("-- error handling test test --");
Pipeline pipe = new Pipeline();
pipe.add(buggy);
try {
pipe.process("");
} catch (YaqpException ex) {
assertTrue(ex instanceof DuplicateKeyException);
assertTrue(ex.getCode().equals(Cause.XA1));
}
}
/**
* Test of process method, of class Pipeline.
*/
@Test
public void testPipe() {
System.out.println("-- first test --");
Pipeline pipe = new Pipeline();
pipe.setfailSensitive(false);
pipe.add(p1);
pipe.add(p2);
pipe.add(p3);
try {
String out = (String) pipe.process("data ");
assertTrue(Math.abs(pipe.getStatus().getElapsedTime(STATUS.ERROR)-5000)<5);
assertTrue(Math.abs(pipe.getStatus().getElapsedTime(STATUS.PROCESSED)-180)<5);
assertTrue(!pipe.getStatus().isInProgress());
} catch (Throwable ex) {
//fail(/*ex.getMessage()*/);
}
}
/**
* Test of isEnabled method, of class Pipeline.
*/
@Test
public void oneIsEnabled() {
System.out.println("-- one is enabled --");
Pipeline<String, String, Processor<String, String>> pipe =
new Pipeline<String, String, Processor<String, String>>();
pipe.add(p1);
pipe.add(p2);
p2.setEnabled(false);
try {
String out = pipe.process("data ");
assertTrue(out.equals("data <-- p1"));
} catch (YaqpException ex) {
fail(ex.toString());
}
}
@Test
public void allDisabled(){
System.out.println("-- all disabled --");
Pipeline<String, String, Processor<String, String>> pipe =
new Pipeline<String, String, Processor<String, String>>();
pipe.add(p1);
pipe.add(p2);
p2.setEnabled(false);
p1.setEnabled(false);
try {
String out = pipe.process("data ");
assertTrue("data ".equals(out));
} catch (YaqpException ex) {
fail(ex.toString());
}
}
}