package detective.core.distribute;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
public class SparkDriverTest {
@Test
public void testResultSetCollectionFromDifferentMachine(){
List<JobRunResult> results = SparkDriver.runJobs("detective.core.distribute.jobresult", "UnitTest_detective.core.distribute.jobresult");
Assert.assertTrue(results.size() == 2);
Assert.assertEquals(results.get(0).getStoryName(), "Story For Testing Collect Running Result from Different Threads / Machines");
Assert.assertEquals(results.get(0).getScenarioName(), "Successed Scenario");
Assert.assertEquals(results.get(0).getSuccessed(), true);
Assert.assertEquals(results.get(0).getSteps().size(), 3);
Assert.assertEquals(results.get(0).getSteps().get(0).getStepName(), "step1 log a user message");
Assert.assertEquals(results.get(0).getSteps().get(0).getAdditionalMsgs().size(), 1);
Assert.assertEquals(results.get(0).getSteps().get(0).getAdditionalMsgs().get(0), "This is the message will display to end user");
Assert.assertEquals(results.get(0).getSteps().get(1).getStepName(), "run echo task");
Assert.assertEquals(results.get(0).getSteps().get(1).getAdditionalMsgs().size(), 1);
Assert.assertEquals(results.get(0).getSteps().get(1).getAdditionalMsgs().get(0), "This is the message from task");
Assert.assertEquals(results.get(0).getSteps().get(2).getStepName(), "I can check message which will echo back");
Assert.assertEquals(results.get(0).getSteps().get(2).getAdditionalMsgs().size(), 0);
Assert.assertEquals(results.get(1).getStoryName(), "Story For Testing Collect Running Result from Different Threads / Machines");
Assert.assertEquals(results.get(1).getScenarioName(), "Failed Scenario");
Assert.assertEquals(results.get(1).getSuccessed(), false);
Assert.assertEquals(results.get(1).getSteps().size(), 3);
Assert.assertEquals(results.get(1).getSteps().get(0).getStepName(), "step1 log a user message");
Assert.assertEquals(results.get(1).getSteps().get(0).getAdditionalMsgs().size(), 1);
Assert.assertEquals(results.get(1).getSteps().get(0).getAdditionalMsgs().get(0), "This is the message will display to end user");
Assert.assertEquals(results.get(1).getSteps().get(1).getStepName(), "through exception");
Assert.assertEquals(results.get(1).getSteps().get(1).getAdditionalMsgs().size(), 0);
Assert.assertEquals(results.get(1).getSteps().get(1).isSuccessed(), false);
Assert.assertEquals(results.get(1).getSteps().get(2).getStepName(), "There is no chance this step will been executed, but this step will show in console so that user know one step has been scaped");
Assert.assertEquals(results.get(1).getSteps().get(2).getAdditionalMsgs().size(), 0);
Assert.assertEquals(results.get(1).getSteps().get(2).isSuccessed(), false);
}
@Test
public void testGiveAPackageNameAllTestShouldRunInDifferentThread() {
runningThreads.clear();
Long errors = SparkDriver.run(new String[]{"detective.core.distribute.collect"});
Assert.assertEquals(errors.intValue(), 1);
checkThread("Story_1_Scenario_1 - Scenario1");
checkThread("Story_1_Scenario_3 - Scenario1");
checkThread("Story_1_Scenario_3 - Scenario2");
checkThread("Story_1_Scenario_3 - Scenario3");
checkThread("Story_2_FirstStory_Scenario_2 - Scenario1");
checkThread("Story_2_FirstStory_Scenario_2 - Scenario2");
checkThread("Story_2_SecondStory_Scenario_2 - Scenario1");
checkThread("Story_2_SecondStory_Scenario_2 - Scenario2");
checkThread("Story_2_Scenario_2_subpackage_FirstStory - Scenario1");
checkThread("Story_2_Scenario_2_subpackage_FirstStory - Scenario2");
checkThread("Story_2_Scenario_2_subpackage_SecondStory - Scenario1");
checkThread("Story_2_Scenario_2_subpackage_SecondStory - Scenario2");
}
private Set<String> runningThreads = new HashSet<String>();
private void checkThread(String scenarioName){
String threadName = ScenarioThreadRecorder.getThread("sparkTest", scenarioName);
Assert.assertNotNull("The story should run through and a thread name should put into a common store area", threadName);
Assert.assertTrue("Should running in a spark worker thread", threadName.contains("worker"));
//Assert.assertFalse("Every scenario should running in a different spark thread, thread name:" + threadName + " but already exists in list" + runningThreads.toString(), runningThreads.contains(threadName));
runningThreads.add(threadName);
}
}