diff --git a/qilin.core/src/qilin/core/PTAScene.java b/qilin.core/src/qilin/core/PTAScene.java index c468d68..7ec804d 100644 --- a/qilin.core/src/qilin/core/PTAScene.java +++ b/qilin.core/src/qilin/core/PTAScene.java @@ -44,6 +44,11 @@ public static PTAScene v() { return instance; } + public static void junitReset() { + VirtualCalls.reset(); + instance = null; + } + public static void reset() { G.reset(); VirtualCalls.reset(); @@ -74,6 +79,10 @@ public Value getFieldGlobalThrow() { return this.fakeMainFactory.getFieldGlobalThrow(); } + public void setMainClass(SootClass m) { + sootScene.setMainClass(m); + } + /* * wrapper methods of Soot Scene. Note, we do not allow you to use Soot Scene directly in qilin.qilin.pta subproject * to avoid confusing. diff --git a/qilin.core/src/qilin/core/builder/FakeMainFactory.java b/qilin.core/src/qilin/core/builder/FakeMainFactory.java index 4fb29d1..e59295d 100644 --- a/qilin.core/src/qilin/core/builder/FakeMainFactory.java +++ b/qilin.core/src/qilin/core/builder/FakeMainFactory.java @@ -59,7 +59,12 @@ private List getEntryPoints() { } if (CoreConfig.v().getPtaConfig().singleentry) { - ret.addAll(EntryPoints.v().application()); + List entries = EntryPoints.v().application(); + if (entries.isEmpty()) { + throw new RuntimeException("Must specify MAINCLASS when appmode enabled!!!"); + } else { + ret.addAll(entries); + } } else { System.out.println("include implicit entry!"); ret.addAll(EntryPoints.v().application()); diff --git a/qilin.core/src/qilin/core/builder/MethodNodeFactory.java b/qilin.core/src/qilin/core/builder/MethodNodeFactory.java index a381a30..1cb36cb 100644 --- a/qilin.core/src/qilin/core/builder/MethodNodeFactory.java +++ b/qilin.core/src/qilin/core/builder/MethodNodeFactory.java @@ -228,7 +228,8 @@ final public void caseNewArrayExpr(NewArrayExpr nae) { @Override final public void caseNewExpr(NewExpr ne) { - SootClass cl = PTAScene.v().loadClassAndSupport(ne.getType().toString()); + RefType refType = (RefType) ne.getType(); + SootClass cl = refType.getSootClass(); PTAUtils.clinitsOf(cl).forEach(mpag::addTriggeredClinit); setResult(pag.heapAbstractor().abstractHeap(ne, ne.getType(), method)); } diff --git a/qilin.core/src/qilin/core/pag/StringConstantNode.java b/qilin.core/src/qilin/core/pag/StringConstantNode.java index e0b9aa7..c52fa7c 100644 --- a/qilin.core/src/qilin/core/pag/StringConstantNode.java +++ b/qilin.core/src/qilin/core/pag/StringConstantNode.java @@ -36,9 +36,9 @@ public String toString() { } public String getString() { - if (!(newExpr instanceof String)) { + if (!(newExpr instanceof StringConstant)) { System.out.println(newExpr + ";;" + newExpr.getClass()); } - return (String) newExpr; + return ((StringConstant) newExpr).value; } } diff --git a/qilin.microben/src/qilin/microben/core/reflog/ArrayNewInstance.log b/qilin.microben/src/qilin/microben/core/reflog/ArrayNewInstance.log deleted file mode 100644 index 8287576..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/ArrayNewInstance.log +++ /dev/null @@ -1 +0,0 @@ -Array.newInstance;int[];qilin.microben.core.reflog.ArrayNewInstance.main;9;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/ClassForName.log b/qilin.microben/src/qilin/microben/core/reflog/ClassForName.log deleted file mode 100644 index e921273..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/ClassForName.log +++ /dev/null @@ -1,3 +0,0 @@ -Class.forName;qilin.microben.core.reflog.ClassForName;qilin.microben.core.reflog.ClassForName.main;9;; -Class.forName;qilin.microben.core.reflog.ClassForName;qilin.microben.core.reflog.ClassForName.main;11;; -Class.forName;java.lang.Object;qilin.microben.core.reflog.ClassForName.main;13;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/ClassForName1.log b/qilin.microben/src/qilin/microben/core/reflog/ClassForName1.log deleted file mode 100644 index 8bcddb9..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/ClassForName1.log +++ /dev/null @@ -1,3 +0,0 @@ -Class.forName;qilin.microben.core.reflog.ClassForName1;qilin.microben.core.reflog.ClassForName1.main;9;; -Class.forName;qilin.microben.core.reflog.ClassForName1;qilin.microben.core.reflog.ClassForName1.main;11;; -Class.forName;java.lang.Object;qilin.microben.core.reflog.ClassForName1.main;13;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/ClassNewInstance.log b/qilin.microben/src/qilin/microben/core/reflog/ClassNewInstance.log deleted file mode 100644 index 7e2427b..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/ClassNewInstance.log +++ /dev/null @@ -1 +0,0 @@ -Class.newInstance;qilin.microben.core.reflog.ClassNewInstance;qilin.microben.core.reflog.ClassNewInstance.main;10;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/ConstructorNewInstance.log b/qilin.microben/src/qilin/microben/core/reflog/ConstructorNewInstance.log deleted file mode 100644 index 9b7e5b3..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/ConstructorNewInstance.log +++ /dev/null @@ -1 +0,0 @@ -Constructor.newInstance;(java.lang.Object)>;qilin.microben.core.reflog.ConstructorNewInstance.main;17;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/DoopRefBug.log b/qilin.microben/src/qilin/microben/core/reflog/DoopRefBug.log deleted file mode 100644 index c569689..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/DoopRefBug.log +++ /dev/null @@ -1 +0,0 @@ -Field.get*;;qilin.microben.core.reflog.DoopRefBug.main;15;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/FieldGet.log b/qilin.microben/src/qilin/microben/core/reflog/FieldGet.log deleted file mode 100644 index aa9f40b..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/FieldGet.log +++ /dev/null @@ -1 +0,0 @@ -Field.get*;;qilin.microben.core.reflog.FieldGet.main;12;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/FieldGetStatic.log b/qilin.microben/src/qilin/microben/core/reflog/FieldGetStatic.log deleted file mode 100644 index fee1c56..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/FieldGetStatic.log +++ /dev/null @@ -1 +0,0 @@ -Field.get*;;qilin.microben.core.reflog.FieldGetStatic.main;11;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/FieldSet.log b/qilin.microben/src/qilin/microben/core/reflog/FieldSet.log deleted file mode 100644 index 1203dc0..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/FieldSet.log +++ /dev/null @@ -1,2 +0,0 @@ -Field.set*;;qilin.microben.core.reflog.FieldSet.main;13;; -Field.set*;;qilin.microben.core.reflog.FieldSet.main;14;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/FieldSetStatic.log b/qilin.microben/src/qilin/microben/core/reflog/FieldSetStatic.log deleted file mode 100644 index cdbad95..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/FieldSetStatic.log +++ /dev/null @@ -1 +0,0 @@ -Field.set*;;qilin.microben.core.reflog.FieldSetStatic.main;10;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/MethodInvoke.log b/qilin.microben/src/qilin/microben/core/reflog/MethodInvoke.log deleted file mode 100644 index 8e57aba..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/MethodInvoke.log +++ /dev/null @@ -1 +0,0 @@ -Method.invoke;;qilin.microben.core.reflog.MethodInvoke.main;8;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/MethodInvokeStatic.log b/qilin.microben/src/qilin/microben/core/reflog/MethodInvokeStatic.log deleted file mode 100644 index 5be755e..0000000 --- a/qilin.microben/src/qilin/microben/core/reflog/MethodInvokeStatic.log +++ /dev/null @@ -1 +0,0 @@ -Method.invoke;;qilin.microben.core.reflog.MethodInvokeStatic.main;15;; \ No newline at end of file diff --git a/qilin.microben/src/qilin/microben/core/reflog/Reflection.log b/qilin.microben/src/qilin/microben/core/reflog/Reflection.log new file mode 100644 index 0000000..59ea3c4 --- /dev/null +++ b/qilin.microben/src/qilin/microben/core/reflog/Reflection.log @@ -0,0 +1,17 @@ +Array.newInstance;int[];qilin.microben.core.reflog.ArrayNewInstance.main;27;; +Class.forName;qilin.microben.core.reflog.ClassForName;qilin.microben.core.reflog.ClassForName.main;27;; +Class.forName;qilin.microben.core.reflog.ClassForName;qilin.microben.core.reflog.ClassForName.main;29;; +Class.forName;java.lang.Object;qilin.microben.core.reflog.ClassForName.main;31;; +Class.forName;qilin.microben.core.reflog.ClassForName1;qilin.microben.core.reflog.ClassForName1.main;27;; +Class.forName;qilin.microben.core.reflog.ClassForName1;qilin.microben.core.reflog.ClassForName1.main;29;; +Class.forName;java.lang.Object;qilin.microben.core.reflog.ClassForName1.main;31;; +Class.newInstance;qilin.microben.core.reflog.ClassNewInstance;qilin.microben.core.reflog.ClassNewInstance.main;28;; +Constructor.newInstance;(java.lang.Object)>;qilin.microben.core.reflog.ConstructorNewInstance.main;35;; +Field.get*;;qilin.microben.core.reflog.DoopRefBug.main;33;; +Field.get*;;qilin.microben.core.reflog.FieldGet.main;30;; +Field.get*;;qilin.microben.core.reflog.FieldGetStatic.main;29;; +Field.set*;;qilin.microben.core.reflog.FieldSet.main;31;; +Field.set*;;qilin.microben.core.reflog.FieldSet.main;32;; +Field.set*;;qilin.microben.core.reflog.FieldSetStatic.main;28;; +Method.invoke;;qilin.microben.core.reflog.MethodInvoke.main;26;; +Method.invoke;;qilin.microben.core.reflog.MethodInvokeStatic.main;33;; \ No newline at end of file diff --git a/qilin.pta/src/driver/PTAOption.java b/qilin.pta/src/driver/PTAOption.java index 86035d0..2a224ab 100644 --- a/qilin.pta/src/driver/PTAOption.java +++ b/qilin.pta/src/driver/PTAOption.java @@ -150,8 +150,6 @@ protected void parseCommandLineOptions(CommandLine cmd) { // application configuration if (cmd.hasOption("mainclass")) { PTAConfig.v().getAppConfig().MAIN_CLASS = cmd.getOptionValue("mainclass"); - } else if (PTAConfig.v().getPtaConfig().singleentry) { - throw new RuntimeException("Must specify MAINCLASS when appmode enabled!!!"); } if (cmd.hasOption("jre")) { PTAConfig.v().getAppConfig().JRE = cmd.getOptionValue("jre"); diff --git a/qilin.pta/test/qilin/test/FlowSensTests.java b/qilin.pta/test/qilin/test/FlowSensTests.java index aba1836..05a39cd 100644 --- a/qilin.pta/test/qilin/test/FlowSensTests.java +++ b/qilin.pta/test/qilin/test/FlowSensTests.java @@ -18,44 +18,38 @@ package qilin.test; -import driver.Main; +import org.junit.Ignore; import org.junit.Test; import qilin.test.util.JunitTests; public class FlowSensTests extends JunitTests { @Test public void testLoops() { - String[] args = generateArguments("qilin.microben.flowsens.Loops"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.flowsens.Loops")); } - @Test + @Ignore public void testFlowSens0() { - String[] args = generateArguments("qilin.microben.flowsens.FlowSens0"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.flowsens.FlowSens0")); } - @Test + @Ignore public void testInstanceOf0() { - String[] args = generateArguments("qilin.microben.flowsens.InstanceOf0"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.flowsens.InstanceOf0")); } - @Test + @Ignore public void testBranching1() { - String[] args = generateArguments("qilin.microben.flowsens.Branching1"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.flowsens.Branching1")); } - @Test + @Ignore public void testStrongUpdate1() { - String[] args = generateArguments("qilin.microben.flowsens.StrongUpdate1"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.flowsens.StrongUpdate1")); } - @Test + @Ignore public void testStrongUpdate2() { - String[] args = generateArguments("qilin.microben.flowsens.StrongUpdate2"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.flowsens.StrongUpdate2")); } } diff --git a/qilin.pta/test/qilin/test/context/CFATests.java b/qilin.pta/test/qilin/test/context/CFATests.java index 69fc3d1..4da4049 100644 --- a/qilin.pta/test/qilin/test/context/CFATests.java +++ b/qilin.pta/test/qilin/test/context/CFATests.java @@ -18,7 +18,6 @@ package qilin.test.context; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; @@ -26,25 +25,21 @@ public class CFATests extends JunitTests { @Test public void testCFA1k0() { - String[] args = generateArguments("qilin.microben.context.cfa.CFA1k0", "1c"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.cfa.CFA1k0", "1c")); } @Test public void testCFA1k1() { - String[] args = generateArguments("qilin.microben.context.cfa.CFA1k1", "1c"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.cfa.CFA1k1", "1c")); } @Test public void testCFA1k2() { - String[] args = generateArguments("qilin.microben.context.cfa.CFA1k2", "1c"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.cfa.CFA1k2", "1c")); } @Test public void testCFA2k() { - String[] args = generateArguments("qilin.microben.context.cfa.CFA2k", "2c"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.cfa.CFA2k", "2c")); } } \ No newline at end of file diff --git a/qilin.pta/test/qilin/test/context/CollectionsTests.java b/qilin.pta/test/qilin/test/context/CollectionsTests.java index 70ddee0..067865f 100644 --- a/qilin.pta/test/qilin/test/context/CollectionsTests.java +++ b/qilin.pta/test/qilin/test/context/CollectionsTests.java @@ -18,68 +18,57 @@ package qilin.test.context; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class CollectionsTests extends JunitTests { @Test public void testArrayList0() { - String[] args = generateArguments("qilin.microben.context.collections.ArrayList0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.ArrayList0", "2o")); } @Test public void testLinkedList0() { - String[] args = generateArguments("qilin.microben.context.collections.LinkedList0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.LinkedList0", "2o")); } @Test public void testVector0() { - String[] args = generateArguments("qilin.microben.context.collections.Vector0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.Vector0", "2o")); } @Test public void testHashMap0() { - String[] args = generateArguments("qilin.microben.context.collections.HashMap0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.HashMap0", "2o")); } @Test public void testTreeMap0() { - String[] args = generateArguments("qilin.microben.context.collections.TreeMap0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.TreeMap0", "2o")); } @Test public void testHashSet0() { - String[] args = generateArguments("qilin.microben.context.collections.HashSet0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.HashSet0", "3o")); } @Test public void testTreeSet0() { - String[] args = generateArguments("qilin.microben.context.collections.TreeSet0", "3o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.TreeSet0", "3o")); } @Test public void testHashTable0() { - String[] args = generateArguments("qilin.microben.context.collections.HashTable0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.HashTable0", "2o")); } @Test public void testPriorityQueue0() { - String[] args = generateArguments("qilin.microben.context.collections.PriorityQueue0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.PriorityQueue0", "2o")); } @Test public void testStack0() { - String[] args = generateArguments("qilin.microben.context.collections.Stack0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.collections.Stack0", "2o")); } } \ No newline at end of file diff --git a/qilin.pta/test/qilin/test/context/HybTests.java b/qilin.pta/test/qilin/test/context/HybTests.java index 48ac247..f34e0f1 100644 --- a/qilin.pta/test/qilin/test/context/HybTests.java +++ b/qilin.pta/test/qilin/test/context/HybTests.java @@ -18,26 +18,22 @@ package qilin.test.context; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class HybTests extends JunitTests { @Test public void testHyb0() { - String[] args = generateArguments("qilin.microben.context.hyb.Hyb0", "1h"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.hyb.Hyb0", "1h")); } @Test public void testHyb1() { - String[] args = generateArguments("qilin.microben.context.hyb.Hyb1", "1h"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.hyb.Hyb1", "1h")); } @Test public void testHyb2() { - String[] args = generateArguments("qilin.microben.context.hyb.Hyb2", "2h"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.hyb.Hyb2", "2h")); } } diff --git a/qilin.pta/test/qilin/test/context/OBJTests.java b/qilin.pta/test/qilin/test/context/OBJTests.java index 5b3caeb..3c117bf 100644 --- a/qilin.pta/test/qilin/test/context/OBJTests.java +++ b/qilin.pta/test/qilin/test/context/OBJTests.java @@ -18,63 +18,53 @@ package qilin.test.context; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class OBJTests extends JunitTests { @Test public void testOBJ1k0() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ1k0", "1o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ1k0", "1o")); } @Test public void testOBJ1k1() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ1k1", "1o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ1k1", "1o")); } @Test public void testOBJ1k2() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ1k2", "1o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ1k2", "1o")); } @Test public void testOBJ1k3() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ1k3", "1o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ1k3", "1o")); } @Test public void testOBJ1k4() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ1k4", "1o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ1k4", "1o")); } @Test public void testOBJ1k5() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ1k5", "1o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ1k5", "1o")); } @Test public void testOBJ2k0() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ2k0", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ2k0", "2o")); } @Test public void testOBJ2k1() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ2k1", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ2k1", "2o")); } @Test public void testOBJ2k2() { - String[] args = generateArguments("qilin.microben.context.obj.OBJ2k2", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.obj.OBJ2k2", "2o")); } } \ No newline at end of file diff --git a/qilin.pta/test/qilin/test/context/TypeTests.java b/qilin.pta/test/qilin/test/context/TypeTests.java index b7f73af..2209e61 100644 --- a/qilin.pta/test/qilin/test/context/TypeTests.java +++ b/qilin.pta/test/qilin/test/context/TypeTests.java @@ -18,20 +18,17 @@ package qilin.test.context; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class TypeTests extends JunitTests { @Test public void testType1k0() { - String[] args = generateArguments("qilin.microben.context.type.Type1k0", "1t"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.type.Type1k0", "1t")); } @Test public void testType2k0() { - String[] args = generateArguments("qilin.microben.context.type.Type2k0", "2t"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.context.type.Type2k0", "2t")); } } diff --git a/qilin.pta/test/qilin/test/core/ArrayTests.java b/qilin.pta/test/qilin/test/core/ArrayTests.java index 5123757..ef61af6 100644 --- a/qilin.pta/test/qilin/test/core/ArrayTests.java +++ b/qilin.pta/test/qilin/test/core/ArrayTests.java @@ -18,38 +18,32 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class ArrayTests extends JunitTests { @Test public void testArrayIndex() { - String[] args = generateArguments("qilin.microben.core.array.ArrayIndex"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.array.ArrayIndex")); } @Test public void testMultiArraySimple() { - String[] args = generateArguments("qilin.microben.core.array.MultiArraySimple"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.array.MultiArraySimple")); } @Test public void testMultiArrayComplex() { - String[] args = generateArguments("qilin.microben.core.array.MultiArrayComplex"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.array.MultiArrayComplex")); } @Test public void testArrayCopy() { - String[] args = generateArguments("qilin.microben.core.array.ArrayCopy"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.array.ArrayCopy")); } @Test public void testArrayElemTypeFiltering() { - String[] args = generateArguments("qilin.microben.core.array.ArrayElemTypeFiltering"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.array.ArrayElemTypeFiltering")); } } diff --git a/qilin.pta/test/qilin/test/core/AssignTests.java b/qilin.pta/test/qilin/test/core/AssignTests.java index 2e47ebf..188c5a3 100644 --- a/qilin.pta/test/qilin/test/core/AssignTests.java +++ b/qilin.pta/test/qilin/test/core/AssignTests.java @@ -18,7 +18,6 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.pta.PTAConfig; import qilin.test.util.JunitTests; @@ -26,77 +25,65 @@ public class AssignTests extends JunitTests { @Test public void testCastFail() { - String[] args = generateArguments("qilin.microben.core.assign.CastFail"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.CastFail")); } @Test public void testCastSucc() { - String[] args = generateArguments("qilin.microben.core.assign.CastSucc"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.CastSucc")); } @Test public void testReceiver2This() { - String[] args = generateArguments("qilin.microben.core.assign.Receiver2This"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.Receiver2This")); } @Test public void testSimpleAssign() { - String[] args = generateArguments("qilin.microben.core.assign.SimpleAssign"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.SimpleAssign")); System.out.println(PTAConfig.v().getAppConfig().MAIN_CLASS); } @Test public void testReturnValue0() { - String[] args = generateArguments("qilin.microben.core.assign.ReturnValue0"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.ReturnValue0")); System.out.println(PTAConfig.v().getAppConfig().MAIN_CLASS); } @Test public void testReturnValue1() { - String[] args = generateArguments("qilin.microben.core.assign.ReturnValue1"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.ReturnValue1")); System.out.println(PTAConfig.v().getAppConfig().MAIN_CLASS); } @Test public void testReturnValue2() { - String[] args = generateArguments("qilin.microben.core.assign.ReturnValue2"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.ReturnValue2")); } @Test public void testReturnValue3() { - String[] args = generateArguments("qilin.microben.core.assign.ReturnValue3"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.ReturnValue3")); } @Test public void testInterAssign() { - String[] args = generateArguments("qilin.microben.core.assign.InterAssign"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.InterAssign")); } @Test public void testStaticParameter() { - String[] args = generateArguments("qilin.microben.core.assign.StaticParameter"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.StaticParameter")); } @Test public void testNullPointer() { - String[] args = generateArguments("qilin.microben.core.assign.NullPointer"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.NullPointer")); } @Test public void testRecursion() { - String[] args = generateArguments("qilin.microben.core.assign.Recursion"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.assign.Recursion")); System.out.println(PTAConfig.v().getAppConfig().MAIN_CLASS); } } diff --git a/qilin.pta/test/qilin/test/core/CallTests.java b/qilin.pta/test/qilin/test/core/CallTests.java index 36fa3ed..61cf812 100644 --- a/qilin.pta/test/qilin/test/core/CallTests.java +++ b/qilin.pta/test/qilin/test/core/CallTests.java @@ -18,27 +18,23 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class CallTests extends JunitTests { @Test public void testVirtualCall0() { - String[] args = generateArguments("qilin.microben.core.call.VirtualCall0"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.call.VirtualCall0")); } @Test public void testVirtualCall1() { - String[] args = generateArguments("qilin.microben.core.call.VirtualCall1"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.call.VirtualCall1")); } @Test public void testStaticCall() { - String[] args = generateArguments("qilin.microben.core.call.StaticCall"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.call.StaticCall")); } } diff --git a/qilin.pta/test/qilin/test/core/ClinitTests.java b/qilin.pta/test/qilin/test/core/ClinitTests.java index b24ff62..751e0b9 100644 --- a/qilin.pta/test/qilin/test/core/ClinitTests.java +++ b/qilin.pta/test/qilin/test/core/ClinitTests.java @@ -18,32 +18,27 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class ClinitTests extends JunitTests { @Test public void testClinitNewExpr() { - String[] args = generateArguments("qilin.microben.core.clinit.ClinitNewExpr"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.clinit.ClinitNewExpr")); } @Test public void testClinitStaticCall() { - String[] args = generateArguments("qilin.microben.core.clinit.ClinitStaticCall"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.clinit.ClinitStaticCall")); } @Test public void testClinitStaticLoad() { - String[] args = generateArguments("qilin.microben.core.clinit.ClinitStaticLoad"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.clinit.ClinitStaticLoad")); } @Test public void testClinitStaticStore() { - String[] args = generateArguments("qilin.microben.core.clinit.ClinitStaticStore"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.clinit.ClinitStaticStore")); } } diff --git a/qilin.pta/test/qilin/test/core/ExceptionTests.java b/qilin.pta/test/qilin/test/core/ExceptionTests.java index 194a10e..a60d92e 100644 --- a/qilin.pta/test/qilin/test/core/ExceptionTests.java +++ b/qilin.pta/test/qilin/test/core/ExceptionTests.java @@ -18,26 +18,22 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class ExceptionTests extends JunitTests { @Test public void testSimpleException() { - String[] args = generateArguments("qilin.microben.core.exception.SimpleException"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.exception.SimpleException")); } @Test public void testExceptionChain() { - String[] args = generateArguments("qilin.microben.core.exception.ExceptionChain"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.exception.ExceptionChain")); } @Test public void testMethodThrow() { - String[] args = generateArguments("qilin.microben.core.exception.MethodThrow"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.exception.MethodThrow")); } } \ No newline at end of file diff --git a/qilin.pta/test/qilin/test/core/FieldTests.java b/qilin.pta/test/qilin/test/core/FieldTests.java index 298b0f6..3cff780 100644 --- a/qilin.pta/test/qilin/test/core/FieldTests.java +++ b/qilin.pta/test/qilin/test/core/FieldTests.java @@ -18,32 +18,27 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class FieldTests extends JunitTests { @Test public void testInstanceLoad() { - String[] args = generateArguments("qilin.microben.core.field.InstanceLoad"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.field.InstanceLoad")); } @Test public void testInstanceStore() { - String[] args = generateArguments("qilin.microben.core.field.InstanceStore"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.field.InstanceStore")); } @Test public void testFieldSensitivity1() { - String[] args = generateArguments("qilin.microben.core.field.FieldSensitivity1"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.field.FieldSensitivity1")); } @Test public void testFieldSensitivity2() { - String[] args = generateArguments("qilin.microben.core.field.FieldSensitivity2"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.field.FieldSensitivity2")); } } diff --git a/qilin.pta/test/qilin/test/core/GlobalTests.java b/qilin.pta/test/qilin/test/core/GlobalTests.java index 5e4263b..1f95e50 100644 --- a/qilin.pta/test/qilin/test/core/GlobalTests.java +++ b/qilin.pta/test/qilin/test/core/GlobalTests.java @@ -18,26 +18,22 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.test.util.JunitTests; public class GlobalTests extends JunitTests { @Test public void testStaticLoad() { - String[] args = generateArguments("qilin.microben.core.global.StaticLoad"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.global.StaticLoad")); } @Test public void testStaticStore() { - String[] args = generateArguments("qilin.microben.core.global.StaticStore"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.global.StaticStore")); } @Test public void testStringConstant() { - String[] args = generateArguments("qilin.microben.core.global.StringConstant"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.global.StringConstant")); } } diff --git a/qilin.pta/test/qilin/test/core/NativeTests.java b/qilin.pta/test/qilin/test/core/NativeTests.java index 1f85b39..77e1087 100644 --- a/qilin.pta/test/qilin/test/core/NativeTests.java +++ b/qilin.pta/test/qilin/test/core/NativeTests.java @@ -18,7 +18,6 @@ package qilin.test.core; -import driver.Main; import org.junit.Ignore; import org.junit.Test; import qilin.test.util.JunitTests; @@ -26,80 +25,67 @@ public class NativeTests extends JunitTests { @Test public void testArrayCopy() { - String[] args = generateArguments("qilin.microben.core.natives.ArrayCopy"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.ArrayCopy")); } @Test public void testObjectClone() { - String[] args = generateArguments("qilin.microben.core.natives.ObjectClone"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.ObjectClone")); } @Test public void testPrivilegedActions0() { - String[] args = generateArguments("qilin.microben.core.natives.PrivilegedActions0"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.PrivilegedActions0")); } @Test public void testPrivilegedActions1() { - String[] args = generateArguments("qilin.microben.core.natives.PrivilegedActions1"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.PrivilegedActions1")); } @Test public void testPrivilegedActions2() { - String[] args = generateArguments("qilin.microben.core.natives.PrivilegedActions2", "2o"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.PrivilegedActions2", "2o")); } @Test public void testSystemIn() { - String[] args = generateArguments("qilin.microben.core.natives.SystemIn"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.SystemIn")); } @Test public void testSystemOut() { - String[] args = generateArguments("qilin.microben.core.natives.SystemOut"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.SystemOut")); } @Test public void testSystemErr() { - String[] args = generateArguments("qilin.microben.core.natives.SystemErr"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.SystemErr")); } @Test public void testFinalize() { - String[] args = generateArguments("qilin.microben.core.natives.Finalize"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.Finalize")); } @Test public void testTreadRun() { - String[] args = generateArguments("qilin.microben.core.natives.TreadRun"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.TreadRun")); } @Test @Ignore public void testCurrentThread() { - String[] args = generateArguments("qilin.microben.core.natives.CurrentThread"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.CurrentThread")); } @Test public void testRefArrayGet() { - String[] args = generateArguments("qilin.microben.core.natives.RefArrayGet"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.RefArrayGet")); } @Test public void testRefArraySet() { - String[] args = generateArguments("qilin.microben.core.natives.RefArraySet"); - checkAssertions(Main.run(args)); + checkAssertions(run("qilin.microben.core.natives.RefArraySet")); } } diff --git a/qilin.pta/test/qilin/test/core/ReflogTests.java b/qilin.pta/test/qilin/test/core/ReflogTests.java index 52203d6..06b9c40 100644 --- a/qilin.pta/test/qilin/test/core/ReflogTests.java +++ b/qilin.pta/test/qilin/test/core/ReflogTests.java @@ -18,99 +18,71 @@ package qilin.test.core; -import driver.Main; import org.junit.Test; import qilin.core.PTA; import qilin.test.util.JunitTests; -import qilin.util.Util; - -import java.io.File; public class ReflogTests extends JunitTests { @Test public void testFieldGetStatic() { - String[] args = generateArguments("qilin.microben.core.reflog.FieldGetStatic"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "FieldGetStatic.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.FieldGetStatic")); } @Test public void testFieldGet() { - String[] args = generateArguments("qilin.microben.core.reflog.FieldGet"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "FieldGet.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.FieldGet")); } @Test public void testFieldSetStatic() { - String[] args = generateArguments("qilin.microben.core.reflog.FieldSetStatic"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "FieldSetStatic.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.FieldSetStatic")); } @Test public void testFieldSet() { - String[] args = generateArguments("qilin.microben.core.reflog.FieldSet"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "FieldSet.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.FieldSet")); } @Test public void testArrayNewInstance() { - String[] args = generateArguments("qilin.microben.core.reflog.ArrayNewInstance"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "ArrayNewInstance.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.ArrayNewInstance")); } @Test public void testConstructorNewInstance() { - String[] args = generateArguments("qilin.microben.core.reflog.ConstructorNewInstance"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "ConstructorNewInstance.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.ConstructorNewInstance")); } @Test public void testMethodInvokeStatic() { - String[] args = generateArguments("qilin.microben.core.reflog.MethodInvokeStatic"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "MethodInvokeStatic.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.MethodInvokeStatic")); } @Test public void testMethodInvoke() { - String[] args = generateArguments("qilin.microben.core.reflog.MethodInvoke"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "MethodInvoke.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.MethodInvoke")); } @Test public void testClassNewInstance() { - String[] args = generateArguments("qilin.microben.core.reflog.ClassNewInstance"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "ClassNewInstance.log"}); - checkAssertions(Main.run(newArgs)); + checkAssertions(run("qilin.microben.core.reflog.ClassNewInstance")); } @Test public void testDoopRefBug() { - String[] args = generateArguments("qilin.microben.core.reflog.DoopRefBug"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "DoopRefBug.log"}); - PTA pta = Main.run(newArgs); + PTA pta = run("qilin.microben.core.reflog.DoopRefBug"); checkAssertions(pta); } @Test public void testClassForName() { - String[] args = generateArguments("qilin.microben.core.reflog.ClassForName"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "ClassForName.log"}); - PTA pta = Main.run(newArgs); + PTA pta = run("qilin.microben.core.reflog.ClassForName"); checkAssertions(pta); } @Test public void testClassForName1() { - String[] args = generateArguments("qilin.microben.core.reflog.ClassForName1"); - String[] newArgs = Util.concat(args, new String[]{"-reflectionlog", refLogPath + File.separator + "ClassForName1.log"}); - PTA pta = Main.run(newArgs); + PTA pta = run("qilin.microben.core.reflog.ClassForName1"); checkAssertions(pta); } } \ No newline at end of file diff --git a/qilin.pta/test/qilin/test/util/JunitTests.java b/qilin.pta/test/qilin/test/util/JunitTests.java index 2c0feca..c5675be 100644 --- a/qilin.pta/test/qilin/test/util/JunitTests.java +++ b/qilin.pta/test/qilin/test/util/JunitTests.java @@ -18,11 +18,16 @@ package qilin.test.util; +import driver.Main; +import driver.PTAFactory; +import driver.PTAOption; +import driver.PTAPattern; import org.junit.Before; import org.junit.BeforeClass; import qilin.core.PTA; import qilin.core.PTAScene; import qilin.pta.PTAConfig; +import soot.options.Options; import java.io.File; import java.io.IOException; @@ -32,50 +37,65 @@ public abstract class JunitTests { protected static String appPath, jrePath, refLogPath; - + protected static boolean isSetUp = false; @BeforeClass public static void setUp() throws IOException { + if (isSetUp) { + return; + } File rootDir = new File("../"); File testDir = new File(rootDir, "qilin.microben" + File.separator + "build" + File.separator + "classes" + File.separator + "java" + File.separator + "main"); appPath = testDir.getCanonicalPath(); - System.out.println(appPath); - File refLogDir = new File(rootDir, "src" + File.separator + "qilin" + File.separator + "microben" + File.separator + "core" + File.separator + "reflog"); + System.out.println("APP_PATH:" + appPath); + File refLogDir = new File(rootDir, "qilin.microben" + File.separator + "src" + File.separator + "qilin" + File.separator + "microben" + File.separator + "core" + File.separator + "reflog"); refLogPath = refLogDir.getCanonicalPath(); File jreFile = new File(".." + File.separator + "artifact" + File.separator + "pta" + File.separator + "lib" + File.separator + "jre" + File.separator + "jre1.6.0_45"); jrePath = jreFile.getCanonicalPath(); + String[] args = generateArgumentsx(); + PTAOption ptaOption = new PTAOption(); + ptaOption.parseCommandLine(args); + Main.setupSoot(); + isSetUp = true; } @Before - public void resetSootAndStream() { - System.out.println("reset ..."); - PTAConfig.reset(); - PTAScene.reset(); - System.gc(); - System.gc(); - System.gc(); - System.gc(); - System.gc(); + public void reset() { + PTAScene.junitReset(); + } + + public PTA run(String mainClass) { + return run(mainClass, "insens"); } - public String[] generateArguments(String mainClass) { - return generateArguments(mainClass, "insens"); + public PTA run(String mainClass, String ptaPattern) { + PTAConfig.v().getAppConfig().MAIN_CLASS = mainClass; + Options.v().set_main_class(mainClass); + PTAScene.v().setMainClass(PTAScene.v().getSootClass(mainClass)); + PTAConfig.v().getPtaConfig().ptaPattern = new PTAPattern(ptaPattern); + PTAConfig.v().getPtaConfig().ptaName = PTAConfig.v().getPtaConfig().ptaPattern.toString(); + System.out.println(PTAConfig.v().getAppConfig().APP_PATH); + PTA pta = PTAFactory.createPTA(PTAConfig.v().getPtaConfig().ptaPattern); + pta.pureRun(); + return pta; } - public String[] generateArguments(String mainClass, String ptaPattern) { + public static String[] generateArgumentsx() { return new String[]{ "-singleentry", - "-pta=" + ptaPattern, "-apppath", appPath, + "-mainclass", + "qilin.microben.core.exception.SimpleException", "-se", - "-mainclass", mainClass, "-jre=" + jrePath, "-clinit=ONFLY", "-lcs", "-mh", "-pae", "-pe", + "-reflectionlog", + refLogPath + File.separator + "Reflection.log" }; } diff --git a/run.sh b/run.sh index a1e04b0..9e0bdbe 100755 --- a/run.sh +++ b/run.sh @@ -1,7 +1,2 @@ #!/bin/bash ./gradlew clean fatjar -if [ "${1}" = "throw" ] -then - mv artifact/pta/Qilin-1.0-SNAPSHOT.jar ../doopvsqilin/artifact/pta/ - echo "hello, done!" -fi diff --git a/simplelogger.properties b/simplelogger.properties deleted file mode 100644 index 6ee34b8..0000000 --- a/simplelogger.properties +++ /dev/null @@ -1 +0,0 @@ -org.slf4j.simpleLogger.defaultLogLevel=WARN