package detective.core.distribute.collect;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.Assert;
import org.junit.Test;
import detective.core.distribute.JobToRun;
import detective.core.distribute.collector.JobCollector;
public class JobCollectorTest {
@Test
public void testStoryWithMoreThen1Scenarios_ShouldRunInDifferentThreadInSpark() {
List<JobToRun> jobs = JobCollector.collectAll("detective.core.distribute.collect");
Assert.assertEquals(jobs.size(), 1 + 3 + 4 + 4);
Map<String, List<JobToRun>> sotryClassNameJobMap = new HashMap<String, List<JobToRun>>();
for (JobToRun job : jobs){
if (!sotryClassNameJobMap.containsKey(job.getStoryClassName())){
sotryClassNameJobMap.put(job.getStoryClassName(), new ArrayList<JobToRun>());
}
sotryClassNameJobMap.get(job.getStoryClassName()).add(job);
}
List<JobToRun> jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.Story_1_Scenario_1");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_1");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(0).getDataTableIndex(), -1);
jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(1).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(1).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(1).getScenarioIndex(), 1);
Assert.assertEquals(jobList.get(2).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(2).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(2).getScenarioIndex(), 2);
//Story_2_Scenario_2
jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(1).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(1).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(1).getScenarioIndex(), 1);
Assert.assertEquals(jobList.get(2).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(2).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(2).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(3).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(3).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(3).getScenarioIndex(), 1);
//Subpackage
jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(1).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(1).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(1).getScenarioIndex(), 1);
Assert.assertEquals(jobList.get(2).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(2).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(2).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(3).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(3).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(3).getScenarioIndex(), 1);
}
@Test
public void testStoryCollectionDuplicated() {
List<JobToRun> jobs = JobCollector.collectAll("detective.core.distribute.collect", 3);
Assert.assertEquals(jobs.size(), (1 + 3 + 4 + 4) * 3);
Map<String, List<JobToRun>> sotryClassNameJobMap = new HashMap<String, List<JobToRun>>();
for (JobToRun job : jobs){
if (!sotryClassNameJobMap.containsKey(job.getStoryClassName())){
sotryClassNameJobMap.put(job.getStoryClassName(), new ArrayList<JobToRun>());
}
sotryClassNameJobMap.get(job.getStoryClassName()).add(job);
}
List<JobToRun> jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.Story_1_Scenario_1");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_1");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(0).getDataTableIndex(), -1);
jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(1).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(1).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(1).getScenarioIndex(), 1);
Assert.assertEquals(jobList.get(2).getStoryClassName(), "detective.core.distribute.collect.Story_1_Scenario_3");
Assert.assertEquals(jobList.get(2).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(2).getScenarioIndex(), 2);
//Story_2_Scenario_2
jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(1).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(1).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(1).getScenarioIndex(), 1);
Assert.assertEquals(jobList.get(2).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(2).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(2).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(3).getStoryClassName(), "detective.core.distribute.collect.Story_2_Scenario_2");
Assert.assertEquals(jobList.get(3).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(3).getScenarioIndex(), 1);
//Subpackage
jobList = sotryClassNameJobMap.get("detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(0).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(0).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(0).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(1).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(1).getStoryIndex(), 0);
Assert.assertEquals(jobList.get(1).getScenarioIndex(), 1);
Assert.assertEquals(jobList.get(2).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(2).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(2).getScenarioIndex(), 0);
Assert.assertEquals(jobList.get(3).getStoryClassName(), "detective.core.distribute.collect.subpackage.Story_2_Scenario_2_subpackage");
Assert.assertEquals(jobList.get(3).getStoryIndex(), 1);
Assert.assertEquals(jobList.get(3).getScenarioIndex(), 1);
jobs = JobCollector.collectAll("detective.core.distribute.collect", 1);
Assert.assertEquals(jobs.size(), (1 + 3 + 4 + 4) * 1);
}
}