elif "java.lang.RuntimeException: Conflict between apps App1 and App2:" in line:
result = "conflict"
break
+ elif "Direct-Direct Interaction detected:" in line:
+ result = "direct-direct"
+ break
return result
-
+# Extract the error from specific error logs
+def extractError():
+ err = ""
+ if os.path.exists("appCreationError.log"):
+ extractError = open("appCreationError.log", "r")
+ for line in extractError:
+ err = err + line
+ extractError.close()
+ os.system("rm appCreationError.log")
+ return err
+
+# Write error log to the log directory
+# In this case we skip running JPF
+# e.g., in the case of having a direct-direct interaction pair
+def writeErrorLog(jpfLogDir, logName, error):
+ writeError = open(jpfLogDir + logName, "w+")
+ writeError.write(error)
+ writeError.close()
+
# Input parameters:
# - JPF directory
# - JPF logs directory
# Run Runner.py to extract things and create main.groovy, then compile it
print "==> Compiling the apps ...\n"
os.system("make Runner")
- os.system("make main")
-
- # Call JPF
- print "==> Calling JPF and generate logs ...\n"
+ error = extractError()
logName = item[0] + "--" + item[1] + ".log"
- os.system("cd " + jpfDir + ";./run.sh " + jpfLogDir + logName + " main.jpf")
+ if error == "":
+ # Compile
+ os.system("make main")
+ # Call JPF
+ print "==> Calling JPF and generate logs ...\n"
+ os.system("cd " + jpfDir + ";./run.sh " + jpfLogDir + logName + " main.jpf")
+ else:
+ # This is for specific error, e.g., direct-direct interaction that we need to skip
+ writeErrorLog(jpfLogDir, logName, error)
+
result = checkResult(jpfLogDir + logName)
writeLogList.write(logName + "\t\t" + result + "\n")
-
-
-
-
-