package com.datascience.core;
import com.datascience.datastoring.jobs.Job;
import com.datascience.datastoring.jobs.JobFactory;
import com.datascience.datastoring.datamodels.full.MemoryJobStorage;
import com.datascience.gal.BatchDawidSkene;
import com.datascience.gal.IncrementalDawidSkene;
import com.datascience.galc.ContinuousIpeirotis;
import com.datascience.mv.BatchMV;
import com.datascience.mv.IncrementalMV;
import com.datascience.scheduler.Constants;
import com.datascience.serialization.json.GSONSerializer;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
/**
* @Author: artur
*/
public class JobFactoryTest {
private JsonArray createCategoriesJsonArray(){
JsonArray cat = new JsonArray();
cat.add(new JsonPrimitive("cat1"));
cat.add(new JsonPrimitive("cat2"));
return cat;
}
private void checkProjectDependecies(Job job, Class clazz, boolean nominal){
assertNotNull(job.getProject());
assertNotNull(job.getProject().getAlgorithm());
if (nominal)
assertNotNull(job.getProject().getAlgorithm().getModel());
assertNotNull(job.getProject().getData());
assertNotNull(job.getProject().getResults());
assertNotNull(job.getProject().getScheduler());
assertEquals(job.getProject().getAlgorithm().getClass(), clazz);
assertSame(job.getProject().getData(), job.getProject().getAlgorithm().getData());
assertSame(job.getProject().getResults(), job.getProject().getAlgorithm().getResults());
assertSame(job.getProject().getData(), job.getProject().getScheduler().getData());
}
@Test
public void createNominalJob() throws Exception {
HashMap<String, Class> alg = new HashMap<String, Class>();
alg.put("BDS", BatchDawidSkene.class);
alg.put("IDS", IncrementalDawidSkene.class);
alg.put("BMV", BatchMV.class);
alg.put("IMV", IncrementalMV.class);
for (Map.Entry<String, Class> e : alg.entrySet()){
JobFactory jf = new JobFactory(new GSONSerializer(), new MemoryJobStorage());
JsonObject jo = new JsonObject();
jo.addProperty("algorithm", e.getKey());
jo.add("categories", createCategoriesJsonArray());
jo.addProperty(Constants.SCHEDULER, Constants.SCHEDULER_NORMAL);
Job job = jf.createNominalJob(jo, "test");
checkProjectDependecies(job, e.getValue(), true);
}
}
@Test
public void createContinuousJob() throws Exception {
JobFactory jf = new JobFactory(new GSONSerializer(), new MemoryJobStorage());
JsonObject jo = new JsonObject();
jo.addProperty(Constants.SCHEDULER, Constants.SCHEDULER_NORMAL);
Job job = jf.createContinuousJob(jo, "test");
checkProjectDependecies(job, ContinuousIpeirotis.class, false);
}
}