Parallel/serial test launching almost finished.

It still does not work because the Pshell function run() does not accept local parameters without deleting all local envionment variables.
This commit is contained in:
boccioli_m
2015-07-03 14:16:47 +02:00
parent 50e35f0c7d
commit 7d8dceb12b

View File

@@ -2,6 +2,7 @@
* Copyright (c) 2015 Paul Scherrer Institute. All rights reserved.
*/
//<editor-fold defaultstate="collapsed" desc="import">
import ch.psi.pshell.core.Controller;
import ch.psi.utils.swing.MonitoredPanel;
import ch.psi.pshell.ui.Panel;
@@ -41,6 +42,7 @@ import org.apache.commons.io.FilenameUtils;
import org.python.core.PyList;
import static org.python.bouncycastle.util.Arrays.append;
//</editor-fold>
/**
*
* @author boccioli_m
@@ -58,7 +60,7 @@ public class TestingList extends Panel {
/**
*
* @return
* @return jPanel
*/
@Override
protected JPanel create() {
@@ -80,26 +82,26 @@ public class TestingList extends Panel {
boolean status = (boolean) eval("status");
Object deviceName = eval("DEVICE");
String sStatus = (status == true) ? TestStatus.SUCCESS.toString() : TestStatus.FAILURE.toString();
System.out.println("onExecutedFile: received end of test for test "+fileName);
System.out.println("onExecutedFile: received end of test for test " + fileName);
// if (ret != "") {
//start next test
if (testingList.isTestRunAllowed() && testingList.runningTestsCount()==0) {
// testingList.executeTests(iCurrentTestPos);
}
/* } else { // ret empty means that either the test script does not have variable ret, or that the script could not be started at all
ret = "Could not start test script or script doea not contain default variables";
sStatus = TestStatus.FAILURE.toString();
String[] dsDeviceName = testingList.getTestInProgress();
//SwingUtils.showException(getComponent(), ex );
if (dsDeviceName[0] != "") {
iCurrentTestPos = testingList.showResult(dsDeviceName[0], fileName, ret.toString(), sStatus);
//start next test
if (testingList.isTestRunAllowed() && testingList.runningTestsCount()==0) {
testingList.executeTest(iCurrentTestPos);
}
}
//start next test
if (testingList.isTestRunAllowed() && testingList.runningTestsCount() == 0) {
// testingList.executeTests(iCurrentTestPos);
}
*/ } catch (Exception ex) {
/* } else { // ret empty means that either the test script does not have variable ret, or that the script could not be started at all
ret = "Could not start test script or script doea not contain default variables";
sStatus = TestStatus.FAILURE.toString();
String[] dsDeviceName = testingList.getTestInProgress();
//SwingUtils.showException(getComponent(), ex );
if (dsDeviceName[0] != "") {
iCurrentTestPos = testingList.showResult(dsDeviceName[0], fileName, ret.toString(), sStatus);
//start next test
if (testingList.isTestRunAllowed() && testingList.runningTestsCount()==0) {
testingList.executeTest(iCurrentTestPos);
}
}
}
*/ } catch (Exception ex) {
String ret = "Could not start test script";
String sStatus = TestStatus.FAILURE.toString();
String[] dsDeviceName = testingList.getTestInProgress();
@@ -109,7 +111,7 @@ public class TestingList extends Panel {
iCurrentTestPos = testingList.showResult(dsDeviceName[0], fileName, ret, sStatus);
//start next test
if (testingList.isTestRunAllowed()) {
// testingList.executeTests(iCurrentTestPos + 1);
// testingList.executeTests(iCurrentTestPos + 1);
}
}
}
@@ -142,7 +144,7 @@ public class TestingList extends Panel {
/**
*
* @return
* @return int index of the corresponding column
*/
public int index() {
return (int) value;
@@ -223,6 +225,9 @@ public class TestingList extends Panel {
}
};
/**
*
*/
public enum StartSequence {
START_SEQ_AFTER,
@@ -454,7 +459,6 @@ public class TestingList extends Panel {
this.jTable1.setEnabled(false);
}
private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox1ActionPerformed
boolean bSelected = jCheckBox1.isSelected();
int iSelRows = jTable1.getSelectedRowCount();
@@ -476,7 +480,7 @@ public class TestingList extends Panel {
}//GEN-LAST:event_jCheckBox1ActionPerformed
private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MouseClicked
if(this.jTable1.isEnabled()){
if (this.jTable1.isEnabled()) {
try {
switch (evt.getClickCount()) {
case 1:
@@ -531,8 +535,10 @@ public class TestingList extends Panel {
new Thread(() -> {
try {
Object ret = eval("parallelize((run,('testLocalVar1',globals(),{'a':'21', 'b':34})), (run,('testLocalVar2',globals(),{'a':231, 'b':234})))");
//Object ret = eval("parallelize((run,('testLocalVar1',locals= {'a':21, 'b':34})), (run,('testLocalVar2', locals={'a':231, 'b':234})))");
//Object ret = eval("parallelize((run,('testLocalVar1',globals(),{'a':'21', 'b':34})), (run,('testLocalVar2',globals(),{'a':231, 'b':234})))");
Object ret;
ret = eval("parallelize((run,('dummy',)))");
ret = eval("parallelize((run,('testLocalVar1',{'a':21, 'b':34})), (run,('testLocalVar2', {'a':231, 'b':234})))");
Object ret1 = ((ArrayList) ret).get(0);
Object ret2 = ((ArrayList) ret).get(1);
System.out.println(String.valueOf(ret1));
@@ -566,15 +572,18 @@ public class TestingList extends Panel {
//</editor-fold>
/**
*
* @return status of run button. True = tests launching sequence is
* running
*returns whether or not the tests can run
* (Run launched by the user)
*
* @return status of run button. True = tests launching sequence is running
*/
public boolean isTestRunAllowed() {
return (this.jButtonRun.getToolTipText().equals("Stop tests") && pendingTestsCount()>0);
return (this.jButtonRun.getToolTipText().equals("Stop tests") && pendingTestsCount() > 0);
}
//move selection up in table
/**
* move selected rows up in table
*/
private void moveUp() {
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
int[] rows = jTable1.getSelectedRows();
@@ -586,7 +595,9 @@ public class TestingList extends Panel {
}
}
//move selection down in table
/**
* move selected rows down in table
*/
private void moveDown() {
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
int[] rows = jTable1.getSelectedRows();
@@ -598,7 +609,11 @@ public class TestingList extends Panel {
}
}
//open details of the selected test in a new panel
/**
* open details of the selected row in a new panel
*
* @throws exception
*/
private void openDetails() throws Exception {
//pick details from the clicked row
int row = jTable1.getSelectedRow();
@@ -637,30 +652,30 @@ public class TestingList extends Panel {
}
/**
* show test result in table
* put the test result in table
*
* @param deviceName
* @param testName
* @param res
* @param status
* @return
* @param deviceName name of the device to search in table
* @param testPath path of the test to search in table
* @param res String result returned by the test
* @param status String status returned by the test
* @return int index of the row of the device in table
*/
public int showResult(String deviceName, String testName, String res, String status) {
public int showResult(String deviceName, String testPath, String res, String status) {
int rowD = -1;
String sTestName = testName;
logger.log(Level.FINE, "Looking for: deviceName: " + deviceName + "; testPath: " + testName + " in table.");
String sTestName = testPath;
logger.log(Level.FINE, "Looking for: deviceName: " + deviceName + "; testPath: " + testPath + " in table.");
String sStatus;
if(status == "true"){
if (status == "true") {
sStatus = TestStatus.SUCCESS.toString();
} else if (status == "false"){
} else if (status == "false") {
sStatus = TestStatus.FAILURE.toString();
} else{
} else {
sStatus = status;
}
//search for device name in table
for (int row = 0; row <= jTable1.getRowCount() - 1; row++) {
if (deviceName.equals(jTable1.getValueAt(row, COL.DEVICENAME.ordinal()))
&& testName.equals(jTable1.getValueAt(row, COL.TESTPATH.ordinal()))) {
&& testPath.equals(jTable1.getValueAt(row, COL.TESTPATH.ordinal()))) {
rowD = row;
sTestName = jTable1.getValueAt(rowD, COL.TESTNAME.ordinal()).toString();
break;
@@ -687,53 +702,76 @@ public class TestingList extends Panel {
jTable1.setValueAt(res, rowD, COL.RESULT.ordinal());
jTable1.setValueAt(sStatus, rowD, COL.STATUS.ordinal());
} else {
logger.log(Level.SEVERE, "Cant find Test: " + testName + " in table.");
logger.log(Level.SEVERE, "Cant find Test: " + testPath + " in table.");
}
//check if there are still pending tests. If not, set the status of the tool to Stopped.
if (pendingTestsCount()==0 && runningTestsCount()==0) {
if (pendingTestsCount() == 0 && runningTestsCount() == 0) {
setToStopped();
}
}
return rowD;
}
//returns the amount of tests currently in Pending state
public int pendingTestsCount(){
return testsStatusCount(TestStatus.PENDING);
}
//returns the amount of tests currently in Pending state
public int runningTestsCount(){
return testsStatusCount(TestStatus.RUNNING);
}
//returns the amount of tests currently in Pending state
public int successTestsCount(){
return testsStatusCount(TestStatus.SUCCESS);
}
//returns the amount of tests currently in "status" state
private int testsStatusCount(TestStatus status){
/**
*returns the amount of tests currently in Pending state
*
* @return int counter of pending tests
*/
public int pendingTestsCount() {
return testsStatusCount(TestStatus.PENDING);
}
/**
*returns the amount of tests currently in Running state
*
* @return int counter of running tests
*/
public int runningTestsCount() {
return testsStatusCount(TestStatus.RUNNING);
}
/**
*returns the amount of tests currently in Pending state
*
* @return int counter of successful tests
*/
public int successTestsCount() {
return testsStatusCount(TestStatus.SUCCESS);
}
/**
* returns the amount of tests currently in "status" state
*
* @param status type of status to count
* @return int counter with occurrences of the status
*/
private int testsStatusCount(TestStatus status) {
String sStatus;
boolean bSelected;
int iPendingTestsCount = 0;
for (int row = 0; row < jTable1.getRowCount(); row++) {
bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal());
sStatus = jTable1.getValueAt(row, COL.STATUS.ordinal()).toString();
if(bSelected && sStatus == status.toString()){
if (bSelected && sStatus == status.toString()) {
iPendingTestsCount++;
}
}
return iPendingTestsCount;
return iPendingTestsCount;
}
private void setToStopped(){
//No more tests to play. Stop
setButtonToStop();
logger.log(Level.INFO, "End of tests.");
}
/**
* find the test currently in progress
* set the tests to stopped
*/
private void setToStopped() {
//No more tests to play. Stop
setButtonToStop();
logger.log(Level.INFO, "End of tests.");
}
/**
* get the first test currently in progress
*
* @return properties of the test in progress
*/
@@ -756,8 +794,14 @@ public class TestingList extends Panel {
}
}
//returns the status of the specified test name for specified device name
public String getResult(String deviceName, String testName) {
/**
*returns the status of the specified test name for specified device name
*
* @param deviceName name of the device
* @param testPath path of the test file
* @return String containing the result returned by the test
*/
public String getResult(String deviceName, String testPath) {
String sStatus = "";
int rowD = -1, colT = -1;
//search for device name in table
@@ -768,11 +812,12 @@ public class TestingList extends Panel {
}
}
if (rowD >= 0) {
//search for test name in table
if (testName.equals(jTable1.getValueAt(rowD, COL.TESTPATH.ordinal()))) {
//search for test in table
if (testPath.equals(jTable1.getValueAt(rowD, COL.TESTPATH.ordinal()))) {
colT = COL.TESTNAME.ordinal();
}
}
//get the test result
if (colT >= 0 && rowD >= 0) {
sStatus = jTable1.getValueAt(rowD, COL.STATUS.ordinal()).toString();
}
@@ -807,222 +852,230 @@ public class TestingList extends Panel {
jTable1.setValueAt(sStart, row, COL.STARTSEQUENCE.ordinal());
}
}
public void executeTests(){
RunTest runTest = new RunTest();
Thread t = new Thread(runTest);
t.start();
/**
*launch the execution of the tests
*/
public void executeTests() {
RunTest runTest = new RunTest();
Thread t = new Thread(runTest);
t.start();
}
/**
*
*/
public class RunTest implements Runnable {
private HashMap mParameters;
//private HashMap<String,Object> args;
private HashMap<String,HashMap> hTests;
private HashMap<String, HashMap> hTests;
/**
*
*/
public RunTest() {
//System.out.println("A0");
}
public void run() {
// code in the other thread, can reference "var" variable
executeTest(0);
}
//execute the selected tests in the list, starting from the position
private void executeTest(int position) {
boolean bSelected = false;
String sStartSequence, sStatus;
int[] selectedTestsRows = {};
//scan through the table starting from 'position' and execute the first selected test found
int row = 0;// position;
if (row >= 0 && row < jTable1.getRowCount()) {
for (row = position; row < jTable1.getRowCount(); row++) {
bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal());
sStartSequence = jTable1.getValueAt(row, COL.STARTSEQUENCE.ordinal()).toString();
sStatus = jTable1.getValueAt(row, COL.STATUS.ordinal()).toString();
/**
*execute the selected tests in the list, starting from the position
*
*@param position row number from which to start executing tests
*/
private void executeTest(int position) {
boolean bSelected = false;
String sStartSequence, sStatus;
int[] selectedTestsRows = {};
//scan through the table starting from 'position' and execute the first selected test found
int row = 0;// position;
if (row >= 0 && row < jTable1.getRowCount()) {
for (row = position; row < jTable1.getRowCount(); row++) {
bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal());
sStartSequence = jTable1.getValueAt(row, COL.STARTSEQUENCE.ordinal()).toString();
sStatus = jTable1.getValueAt(row, COL.STATUS.ordinal()).toString();
//collect tests to be launched in parallel
//the test must be: selected, set as start with previous, pending.
//alternatively, the test must be: selected, first of the list.
//the test must be: selected, set as start with previous, pending.
//alternatively, the test must be: selected, first of the list.
//System.out.println(String.valueOf(row) + "\t" + String.valueOf(bSelected) + "\t" + String.valueOf(selectedTestsRows.length) + "\t" + sStartSequence + "\t" + sStatus);
//System.out.println(String.valueOf(row) + "\t" + String.valueOf(bSelected) + "\t" + String.valueOf(selectedTestsRows.length) + "\t" + sStartSequence + "\t" + sStatus);
if (bSelected
&& sStatus.equals(TestStatus.PENDING.toString())
&& (selectedTestsRows.length == 0 || //the test must be: selected, pending, first of the list.
sStartSequence.equals(StartSequence.START_SEQ_TOGETHER.toString()))) { //or the test must be: selected, pending, set as start with previous
selectedTestsRows = append(selectedTestsRows, row);
} else if (bSelected
&& sStatus.equals(TestStatus.PENDING.toString()) &&//if this test must be executed...
selectedTestsRows.length > 0 && //but there are already tests to be executed in parallel....
(sStartSequence.equals(StartSequence.START_SEQ_AFTER.toString()))) { //...and this test must be executed in series, then stop searching
break;
}
}
if (selectedTestsRows.length > 0) { //at least one test is selected: launch it (or them)
System.out.println("\n===================================================\n");
executeParallelTestsGroup(selectedTestsRows); //last execution did not find a test file. Continue with next execution
executeTest(position + 1);
if (bSelected
&& sStatus.equals(TestStatus.PENDING.toString())
&& (selectedTestsRows.length == 0 || //the test must be: selected, pending, first of the list.
sStartSequence.equals(StartSequence.START_SEQ_TOGETHER.toString()))) { //or the test must be: selected, pending, set as start with previous
selectedTestsRows = append(selectedTestsRows, row);
} else if (bSelected
&& sStatus.equals(TestStatus.PENDING.toString()) &&//if this test must be executed...
selectedTestsRows.length > 0 && //but there are already tests to be executed in parallel....
(sStartSequence.equals(StartSequence.START_SEQ_AFTER.toString()))) { //...and this test must be executed in series, then stop searching
break;
}
}
if (selectedTestsRows.length > 0) { //at least one test is selected: launch it (or them)
System.out.println("\n===================================================\n");
executeParallelTestsGroup(selectedTestsRows) ; //last execution did not find a test file. Continue with next execution
executeTest(position + 1);
}
}
}
}
private HashMap buildMapFromTableRow(int row){
private HashMap buildMapFromTableRow(int row) {
String sDeviceName = jTable1.getValueAt(row, COL.DEVICENAME.ordinal()).toString();
String sTestName = jTable1.getValueAt(row, COL.TESTNAME.ordinal()).toString();
String sTestCaseName = jTable1.getValueAt(row, COL.TESTSUITE.ordinal()).toString();
String sTestPath = jTable1.getValueAt(row, COL.TESTPATH.ordinal()).toString();
HashMap mParameters = buildParametersMap(String.valueOf(jTable1.getValueAt(row, COL.TESTPARAMS.ordinal())));
HashMap mParameters = buildParametersMap(String.valueOf(jTable1.getValueAt(row, COL.TESTPARAMS.ordinal())));
HashMap testArgs = new HashMap();
//args.put("ret", "");
//args.put("ret", "");
testArgs.put("parameters", mParameters);
testArgs.put("test", sTestName);
testArgs.put("device", sDeviceName);
testArgs.put("testPath", sTestPath);
testArgs.put("status", false);
testArgs.put("testPath", sTestPath);
testArgs.put("status", false);
return testArgs;
}
//start all the tests in the rowsToExecute
private int executeParallelTestsGroup(int[] rowsToExecute) {
int iRet = -1;
HashMap args2 = new HashMap(); //this is the global map that will contain one map per test.
HashMap testArgs; //this is the map for a test.
RunTest runTest;
String sTestName="", sDeviceName="", sTestPath="";
for (int row : rowsToExecute) {
//System.out.println(String.valueOf(row) + "\t" + sDeviceName + "\t" + sTestName + "\t" + sTestCaseName + "\t" + String.valueOf(rowsToExecute.length));
try {
testArgs = buildMapFromTableRow(row);
sTestName = (String) testArgs.get("test") ;
sTestPath = (String) testArgs.get("testPath") ;
sDeviceName = (String) testArgs.get("device") ;
mParameters = (HashMap) testArgs.get("parameters") ;
File f = new File(sTestPath);
if (!f.exists() || f.isDirectory()) {
logger.log(Level.SEVERE, "Cannot find test script: " + sTestPath);
showResult(sDeviceName, sTestPath, "Cannot find test script: " + sTestPath, TestStatus.FAILURE.toString());
continue;
}
showResult(sDeviceName, sTestPath, "Test running", TestStatus.RUNNING.toString());
//launch the test
if (!mParameters.isEmpty()) {
logger.log(Level.INFO, "Running test '" + sTestName + "' with the following parameters: " + mParameters.toString());
System.out.println("Running test '" + sTestName + "' with the following parameters: " + mParameters.toString());
} else {
logger.log(Level.INFO, "Running Test '" + sTestName + "'. No parameters found.");
System.out.println("Running test '" + sTestName + "'. No parameters found.");
}
args2.put(sTestPath,testArgs);
hTests = args2;
iRet = 0;
} catch (Exception ex) {
SwingUtils.showMessage(TestingList.this.getComponent(), "executeTest()", ex.toString());
logger.log(Level.SEVERE, ex.toString());
showResult(sDeviceName, sTestPath, ex.toString(), TestStatus.FAILURE.toString());
setToStopped();
}
}
try{
int iLastExecutedTestIndex = -1;
final String sParallelizeBegin = "(run,(str('";
final String sParallelizeEnd = "'),))";
String sParallelizeArguments;
try {
//System.out.println("A0.1");
String sParallelizeCommand = "parallelize(";
int i = 0;
int iTotalEntries = hTests.entrySet().size();
for(Map.Entry<String, HashMap> hTest : hTests.entrySet()){
//setGlobalsVars(hTest.getValue()); //set global variables that can be read by all test scripts
sTestPath = hTest.getKey().toString();
sTestPath = sTestPath.replace("\\","\\\\");
//System.out.println(hTest.getValue().get("test"));
sParallelizeCommand = sParallelizeCommand + "(run,(str('" + sTestPath;
//System.out.println("Parameters passed: " + String.valueOf(hTest.getValue().get("parameters")));
//System.out.println("A"+i);
sParallelizeArguments = "globals(),{'parameters':'"+hTest.getValue().get("parameters")+
"','test':'"+hTest.getValue().get("test")+
"','device':'"+hTest.getValue().get("device")+
"','status':'"+hTest.getValue().get("status")+"'}";
//sParallelizeArguments = "locals()";
sParallelizeCommand = sParallelizeCommand +
"'),"+sParallelizeArguments;
i++;
if (i<iTotalEntries){
sParallelizeCommand = sParallelizeCommand +")),"; //between each "run" command
}else{
sParallelizeCommand = sParallelizeCommand +")))"; //very last part of command "parallelize"
//start all the tests in the rowsToExecute
private int executeParallelTestsGroup(int[] rowsToExecute) {
int iRet = -1;
HashMap args2 = new HashMap(); //this is the global map that will contain one map per test.
HashMap testArgs; //this is the map for a test.
RunTest runTest;
String sTestName = "", sDeviceName = "", sTestPath = "";
for (int row : rowsToExecute) {
//System.out.println(String.valueOf(row) + "\t" + sDeviceName + "\t" + sTestName + "\t" + sTestCaseName + "\t" + String.valueOf(rowsToExecute.length));
try {
testArgs = buildMapFromTableRow(row);
sTestName = (String) testArgs.get("test");
sTestPath = (String) testArgs.get("testPath");
sDeviceName = (String) testArgs.get("device");
mParameters = (HashMap) testArgs.get("parameters");
File f = new File(sTestPath);
if (!f.exists() || f.isDirectory()) {
logger.log(Level.SEVERE, "Cannot find test script: " + sTestPath);
showResult(sDeviceName, sTestPath, "Cannot find test script: " + sTestPath, TestStatus.FAILURE.toString());
continue;
}
showResult(sDeviceName, sTestPath, "Test running", TestStatus.RUNNING.toString());
//launch the test
if (!mParameters.isEmpty()) {
logger.log(Level.INFO, "Running test '" + sTestName + "' with the following parameters: " + mParameters.toString());
System.out.println("Running test '" + sTestName + "' with the following parameters: " + mParameters.toString());
} else {
logger.log(Level.INFO, "Running Test '" + sTestName + "'. No parameters found.");
System.out.println("Running test '" + sTestName + "'. No parameters found.");
}
args2.put(sTestPath, testArgs);
hTests = args2;
iRet = 0;
} catch (Exception ex) {
SwingUtils.showMessage(TestingList.this.getComponent(), "executeTest()", ex.toString());
logger.log(Level.SEVERE, ex.toString());
showResult(sDeviceName, sTestPath, ex.toString(), TestStatus.FAILURE.toString());
setToStopped();
}
System.out.println(sParallelizeCommand);
//Object ret = eval("globals = globals()");
System.out.println("a");
//ret = eval("locals = 'a'; locals()");
System.out.println("b");
Object ret = eval(sParallelizeCommand);
System.out.println("c");
}
try {
int iLastExecutedTestIndex = -1;
final String sParallelizeBegin = "(run,(str('";
final String sParallelizeEnd = "'),))";
String sParallelizeArguments;
try {
//System.out.println("A0.1");
String sParallelizeCommand = "parallelize(";
int i = 0;
int iTotalEntries = hTests.entrySet().size();
for (Map.Entry<String, HashMap> hTest : hTests.entrySet()) {
//setGlobalsVars(hTest.getValue()); //set global variables that can be read by all test scripts
sTestPath = hTest.getKey().toString();
sTestPath = sTestPath.replace("\\", "\\\\");
//System.out.println(hTest.getValue().get("test"));
sParallelizeCommand = sParallelizeCommand + "(run,(str('" + sTestPath;
//System.out.println("A"+i);
sParallelizeArguments = "globals(),{'parameters':'" + hTest.getValue().get("parameters")
+ // sParallelizeArguments = "{'parameters':'"+hTest.getValue().get("parameters")+
"','test':'" + hTest.getValue().get("test")
+ "','device':'" + hTest.getValue().get("device")
+ "','status':'" + hTest.getValue().get("status") + "'}";
sParallelizeCommand = sParallelizeCommand + "')," + sParallelizeArguments;
i++;
if (i < iTotalEntries) {
sParallelizeCommand = sParallelizeCommand + ")),"; //between each "run" command
} else {
sParallelizeCommand = sParallelizeCommand + ")))"; //very last part of command "parallelize"
}
}
System.out.println(sParallelizeCommand);
Object ret;
//ret = eval("str(locals())");
//ret = eval("str(globals())");
ret = eval(sParallelizeCommand);
System.out.println("c");
// Object ret = eval("parallelize((run,(str('"+sTestPath+"'),)), (run,('Motor Test 3 200ms',)))");
//System.out.println("Ret = " + String.valueOf(ret));
String sTestResult, sTestStatus;
//read the return mapping and put the result in the right table row
//System.out.println("ret type "+ret.getClass().toString() );
//scan through all return mappings of all run tests
for(Object oTestRet : (ArrayList) ret){
//check if the mapping of the selected test has all expected return values
if(((List<PyList>) oTestRet).size()>=4){
//extract return data of the current test
sTestPath = String.valueOf(((List<PyList>) oTestRet).get(0));
sDeviceName = String.valueOf(((List<PyList>) oTestRet).get(1));
sTestResult = String.valueOf(((List<PyList>) oTestRet).get(2));
sTestStatus = String.valueOf(((List<PyList>) oTestRet).get(3));
//from the map of executed tests, get the test name (key is test path)
HashMap<String, HashMap> hTest = hTests.get(sTestPath);
sTestName = String.valueOf(hTest.get("test"));
} else{ //problem, the test script does not return all the expected return values
String sErrorText = "Test "+ sTestPath+" did not return all required return values";
Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, sErrorText);
SwingUtils.showMessage(TestingList.this.getComponent(), "executeParallelTestsGroup()", sErrorText);
System.out.println(String.valueOf(sErrorText));
//try to fetch at least first element of returned map. If fails, it will go to catch
sTestPath = String.valueOf(((List<PyList>) oTestRet).get(0));
sTestStatus = sErrorText;
sTestResult = "false";
HashMap<String, HashMap> hTest = hTests.get(sTestPath);
sDeviceName = String.valueOf(hTest.get("device"));
sTestName = String.valueOf(hTest.get("test"));
}
System.out.println("Result: " + sDeviceName + "|" + sTestPath + "|" + sTestResult + "|" + sTestStatus);
iLastExecutedTestIndex = showResult(sDeviceName, sTestPath, sTestResult, sTestStatus) ;
}
} catch (ClassCastException ccex) {
Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ccex);
SwingUtils.showMessage(TestingList.this.getComponent(), "executeParallelTestsGroup()", ccex.toString());
//System.out.println(String.valueOf(ccex));
if(!sDeviceName.isEmpty())
showResult(sDeviceName, sTestPath, ccex.toString(), TestStatus.FAILURE.toString());
//System.out.println("Ret = " + String.valueOf(ret));
String sTestResult, sTestStatus;
//read the return mapping and put the result in the right table row
//System.out.println("ret type "+ret.getClass().toString() );
//scan through all return mappings of all run tests
for (Object oTestRet : (ArrayList) ret) {
//check if the mapping of the selected test has all expected return values
if (((List<PyList>) oTestRet).size() >= 4) {
//extract return data of the current test
sTestPath = String.valueOf(((List<PyList>) oTestRet).get(0));
sDeviceName = String.valueOf(((List<PyList>) oTestRet).get(1));
sTestResult = String.valueOf(((List<PyList>) oTestRet).get(2));
sTestStatus = String.valueOf(((List<PyList>) oTestRet).get(3));
//from the map of executed tests, get the test name (key is test path)
HashMap<String, HashMap> hTest = hTests.get(sTestPath);
sTestName = String.valueOf(hTest.get("test"));
} else { //problem, the test script does not return all the expected return values
String sErrorText = "Test " + sTestPath + " did not return all required return values";
Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, sErrorText);
SwingUtils.showMessage(TestingList.this.getComponent(), "executeParallelTestsGroup()", sErrorText);
System.out.println(String.valueOf(sErrorText));
//try to fetch at least first element of returned map. If fails, it will go to catch
sTestPath = String.valueOf(((List<PyList>) oTestRet).get(0));
sTestStatus = sErrorText;
sTestResult = "false";
HashMap<String, HashMap> hTest = hTests.get(sTestPath);
sDeviceName = String.valueOf(hTest.get("device"));
sTestName = String.valueOf(hTest.get("test"));
}
System.out.println("Result: " + sDeviceName + "|" + sTestPath + "|" + sTestResult + "|" + sTestStatus);
iLastExecutedTestIndex = showResult(sDeviceName, sTestPath, sTestResult, sTestStatus);
}
} catch (ClassCastException ccex) {
Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ccex);
SwingUtils.showMessage(TestingList.this.getComponent(), "executeParallelTestsGroup()", ccex.toString());
//System.out.println(String.valueOf(ccex));
if (!sDeviceName.isEmpty()) {
showResult(sDeviceName, sTestPath, ccex.toString(), TestStatus.FAILURE.toString());
}
} catch (Exception ex) {
Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex);
SwingUtils.showMessage(TestingList.this.getComponent(), "executeParallelTestsGroup()", ex.toString());
System.out.println(String.valueOf(ex));
showResult(sDeviceName, sTestPath, ex.toString(), TestStatus.FAILURE.toString());
}
} catch (Exception ex) {
Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex);
SwingUtils.showMessage(TestingList.this.getComponent(), "executeParallelTestsGroup()", ex.toString());
System.out.println(String.valueOf(ex));
showResult(sDeviceName, sTestPath, ex.toString(), TestStatus.FAILURE.toString());
}
} catch (Exception ex) {
SwingUtils.showMessage(TestingList.this.getComponent(), "executeParallelTestsGroup(), run thread", ex.toString());
logger.log(Level.SEVERE, ex.toString());
setToStopped();
}
return iRet;
}
}
return iRet;
}
}
/**
* table management
*/
@@ -1080,7 +1133,8 @@ public class TestingList extends Panel {
}
/**
*
*get the current time in format like 2015/07/02 15:59:43
*
* @return formatted time
*/
public String getNow() {
@@ -1090,7 +1144,8 @@ public class TestingList extends Panel {
}
/**
*
*get the current time in format like 20150702155943
*
* @return time with sortable format
*/
public String getnow() {
@@ -1099,7 +1154,12 @@ public class TestingList extends Panel {
return dateFormat.format(date);
}
//scan tests directory, scan devices directory, search for their test cases and scan for tests.
/**
*scan tests directory, scan devices directory, search for their test cases and scan for tests.
*
* @throws FileNotFoundException
* @throws IOException
*/
public void loadTests() throws FileNotFoundException, IOException {
Properties propDevice = new Properties();
Properties propTest = new Properties();
@@ -1151,10 +1211,20 @@ public class TestingList extends Panel {
/**
* Build a map with optional parameters to be passed to the testing
* script. The map is like this: parameters | \_ name | | | \_ value |
* \_ description | \_ name | | | \_ value | \_ description ... the name
* 'name' is the mapping key. 'value' and 'description' are constant
* script. The map is like this:
* parameters
* \_ name
* | \_ value
* | \_ description
* \_ name
* | \_ value
* | \_ description
* ...
* the name 'name' is the mapping key. 'value' and 'description' are constant
* mapping keys of a nested map.
*
* @param parametersString string containing the parameters. Syntax:
* name:value:description[;name:value:description;...]
*/
private HashMap buildParametersMap(String parametersString) {
HashMap mParameters = new HashMap(); // contains name and attributes
@@ -1175,7 +1245,7 @@ public class TestingList extends Panel {
}
/**
*
*Open file selector
*/
public void selectFile() {
final JFileChooser fc = new JFileChooser();
@@ -1191,7 +1261,11 @@ public class TestingList extends Panel {
}
}
private void saveSettings() {
/**
* Save current setup in a file.
* The current position of table rows is also saved.
*/
public void saveSettings() {
final JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(NetbeansPluginPanel.this);
@@ -1201,7 +1275,13 @@ public class TestingList extends Panel {
saveSettings(file);
}
}
/**
* Save current setup in a file.
* The current position of table rows is also saved.
*
* @param file file containing the settings
*/
private void saveSettings(File file) {
DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel();
try {
@@ -1214,7 +1294,11 @@ public class TestingList extends Panel {
}
}
private void loadSettings() {
/**
* Save current setup in a file.
* The current position of table rows is also saved.
*/
public void loadSettings() {
final JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(NetbeansPluginPanel.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
@@ -1223,6 +1307,12 @@ public class TestingList extends Panel {
}
}
/**
* Save current setup in a file.
* The current position of table rows is also saved.
*
* @param file file containing the settings
*/
private void loadSettings(File file) {
DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel();
try {