{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Class Unit Tests" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "// Custom Imports\n", "List addedJars = %jars *.jar\n", "//*/\n", "%maven junit:junit:4.12\n", "%maven org.apache.commons:commons-io:1.3.2\n", "%maven commons-io:commons-io:2.7\n", "\n", "// CryptoGuard imports\n", "import static org.junit.Assert.assertFalse;\n", "import static org.junit.Assert.assertTrue;\n", "import static org.junit.Assert.assertEquals;\n", "import static org.junit.Assert.assertNull;\n", "import static org.junit.Assert.assertNotNull;\n", "import static util.Utils.makeArg;\n", "import frontEnd.Interface.outputRouting.ExceptionHandler;\n", "import frontEnd.Interface.ArgumentsCheck;\n", "import frontEnd.MessagingSystem.routing.Listing;\n", "import frontEnd.MessagingSystem.routing.EnvironmentInformation;\n", "import frontEnd.MessagingSystem.routing.structure.Default.Report;\n", "import frontEnd.MessagingSystem.routing.structure.Scarf.AnalyzerReport;\n", "import frontEnd.MessagingSystem.routing.structure.Scarf.BugInstance;\n", "import frontEnd.Interface.EntryPoint;\n", "import rule.engine.EngineType;\n", "import frontEnd.argsIdentifier;\n", "import java.io.File;\n", "import java.nio.charset.StandardCharsets;\n", "import java.nio.file.Files;\n", "import java.nio.file.Paths;\n", "import java.util.ArrayList;\n", "import java.util.Arrays;\n", "import java.util.List;\n", "import org.junit.After;\n", "import org.junit.Before;\n", "import org.junit.Test;\n", "import org.junit.runner.RunWith;\n", "import soot.G;\n", "import util.Utils;\n", "import org.apache.commons.io.FileUtils;\n", "import java.util.Scanner;\n", "import org.apache.commons.io.filefilter.WildcardFileFilter;" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "// region String Statics\n", "public static final Boolean isLinux = !System.getProperty(\"os.name\").contains(\"Windows\");\n", "\n", "public static final String basePath = System.getProperty(\"user.dir\").replace(\"/Notebook\", \"\");\n", "public static final String testRec = Utils.osPathJoin(basePath, \"samples\");\n", "public static final String srcOneGrv = Utils.osPathJoin(testRec, \"testable-jar\");\n", "public static final String scarfArgs = Utils.osPathJoin(basePath, \"src\", \"main\", \"resources\", \"Scarf\", \"sample.properties\");\n", "public static final String testPath = Utils.osPathJoin(System.getProperty(\"user.dir\"), \"tmp\");\n", "public static final String classSource = Utils.osPathJoin(srcOneGrv, \"build\", \"classes\", \"java\", \"main\", \"tester\");\n", "\n", "FileUtils.deleteDirectory(new File (testPath));\n", "new File(testPath).mkdirs();\n", "\n", "public static final String verySimple_Path = Utils.osPathJoin(testRec, \"VerySimple\");\n", "public static final String verySimple_Klass = Utils.osPathJoin(verySimple_Path, \"very.class\");\n", "public static final String verySimple_Klass_xml_1 = Utils.osPathJoin(testPath, \"verySimple_klass_1.xml\");\n", "public static final String verySimple_Klass_xml_2 = Utils.osPathJoin(testPath, \"verySimple_klass_2.xml\");\n", "public static final String verySimple_Klass_yaml_1 = Utils.osPathJoin(testPath, \"verySimple_klass_2.yaml\");\n", "public static final String testablejar_Crypto_class = Utils.osPathJoin(classSource, \"Crypto.class\");\n", "public static final String testablejar_Crypto_class_xml = Utils.osPathJoin(testPath, \"java-file_One.xml\");\n", "public static final String testablejar_Crypto_class_xml_0 = Utils.osPathJoin(testPath, \"java-file_One_0.xml\");\n", "public static final String newTestCaseTwo_Class = Utils.osPathJoin(classSource, \"NewTestCase2.class\");\n", "public static final String newTestCaseTwo_xml = Utils.osPathJoin(testPath, \"NewTestCase2-class.xml\");\n", "public static final String newTestCaseTwo_xml_0 = Utils.osPathJoin(testPath, \"NewTestCase2-class_0.xml\");\n", "public static final String newTestCaseTwo_Class = Utils.osPathJoin(classSource, \"NewTestCase2.class\");\n", "public static final String newTestCaseTwo_xml = Utils.osPathJoin(testPath, \"NewTestCase2-class.xml\");\n", "public static final String newTestCaseTwo_xml_0 = Utils.osPathJoin(testPath, \"NewTestCase2-class_0.xml\");\n", "public static final String tempFileOutTxt_two = Utils.osPathJoin(testPath, \"testable-jar_classFiles.txt\");\n", "\n", "public static final String[] classFiles = {\n", " Utils.osPathJoin(classSource, \"PBEUsage.class\"),\n", " Utils.osPathJoin(classSource, \"UrlFrameWorks.class\"),\n", " Utils.osPathJoin(classSource, \"NewTestCase1.class\"),\n", " Utils.osPathJoin(classSource, \"NewTestCase2.class\")\n", "};\n", "public static final String srcOneGrvDep = Utils.osPathJoin(testRec, \"testable-jar\", \"build\", \"dependencies\");\n", "public static final String tempFileOutXML_Class_0 = Utils.osPathJoin(testPath, \"java-class-file_0.xml\");\n", "public static final String tempFileOutTxt_two_0 = Utils.osPathJoin(testPath, \"testable-jar_classFiles_0.txt\");\n", "public static final String tempFileOutXML_Class_1 = Utils.osPathJoin(testPath, \"java-class-file_1.xml\");\n", "public static final String tempFileOutXML_Class_Stream_0 = Utils.osPathJoin(testPath, \"java-class-file-stream_0.xml\");" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "// Utililties\n", "String cur_user = System.getProperty(\"user.name\");\n", "String java_home = \"/home/\" + cur_user + \"/.sdkman/candidates/java/8*.0.25*\";\n", "String java7_home = \"/home/\" + cur_user + \"/.sdkman/candidates/java/7*\";\n", "String android_home = \"/home/\" + cur_user + \"/.sdkman/candidates/android/current\";\n", "\n", "//Retrieving a specific path from a wild card based list\n", "public static String getFileFromWildCard(String path) {\n", " String[] split = path.split(\"/\");\n", " StringBuilder build = new StringBuilder();\n", " for (int itr = 0;itr < split.length - 1;itr ++)\n", " build.append(split[itr]).append(\"/\");\n", "\n", " String[] files = new File(build.toString()).list(new WildcardFileFilter(split[split.length-1]));\n", "\n", " if (files.length > 0)\n", " return build.toString() + files[files.length - 1];\n", " else\n", " return null;\n", "}\n", "\n", "java_home = getFileFromWildCard(java_home);\n", "java7_home = getFileFromWildCard(java7_home);\n", "\n", "public static void print(String file) {\n", " try {\n", " Scanner reader = new Scanner(new File(file));\n", "\n", " while (reader.hasNextLine()) System.out.println(reader.nextLine());\n", " } catch (FileNotFoundException e) {\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "public void main_TestableFile_VerySimple() {\n", " G.reset();\n", " soot.G.v().reset();\n", "\n", " String source = verySimple_Klass;\n", " String fileOut = verySimple_Klass_xml_1;\n", "\n", " new File(fileOut).delete();\n", " if (isLinux) {\n", " String args =\n", " makeArg(argsIdentifier.FORMAT, EngineType.CLASSFILES)\n", " + makeArg(argsIdentifier.FORMATOUT, Listing.ScarfXML)\n", " + makeArg(argsIdentifier.SOURCE, source)\n", " + makeArg(argsIdentifier.NOEXIT)\n", " + makeArg(argsIdentifier.ANDROID, \"/InvalidPath/\")\n", " + makeArg(argsIdentifier.VERYVERBOSE)\n", " + makeArg(argsIdentifier.STREAM)\n", " + makeArg(argsIdentifier.PRETTY)\n", " + makeArg(argsIdentifier.JAVA, java_home)\n", " + makeArg(argsIdentifier.OUT, fileOut);\n", "\n", " try {\n", " EntryPoint.main(args.split(\" \"));\n", " AnalyzerReport report = AnalyzerReport.deserialize(new File(fileOut));\n", "\n", " assertFalse(report.getBugInstance().isEmpty());\n", "\n", " List style = new ArrayList<>();\n", " for (BugInstance instance : report.getBugInstance()) style.add(instance.getClassName());\n", " assertTrue(\n", " report.getBugInstance().stream()\n", " .anyMatch(\n", " bugInstance -> {\n", " try {\n", " return bugInstance\n", " .getClassName()\n", " .contains(Utils.retrieveFullyQualifiedName(source));\n", " // bugInstance.getlocation().get(0).getSourceFile().startsWith(Utils.retrieveFullyQualifiedName(source));\n", " } catch (ExceptionHandler exceptionHandler) {\n", " exceptionHandler.printStackTrace();\n", " return false;\n", " }\n", " }));\n", " print(fileOut);\n", " } catch (Exception e) {\n", " e.printStackTrace();\n", " assertNull(e);\n", " }\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "main_TestableFile_VerySimple()" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "public void main_TestableFile_VerySimple_XML() {\n", " G.reset();\n", " soot.G.v().reset();\n", "\n", " String source = verySimple_Klass;\n", " String fileOut = verySimple_Klass_xml_2;\n", " Listing type = Listing.XMLGeneric;\n", "\n", " new File(fileOut).delete();\n", " if (isLinux) {\n", " String args =\n", " makeArg(argsIdentifier.FORMAT, EngineType.CLASSFILES)\n", " + makeArg(argsIdentifier.FORMATOUT, type)\n", " + makeArg(argsIdentifier.SOURCE, source)\n", " + makeArg(argsIdentifier.NOEXIT)\n", " + makeArg(argsIdentifier.ANDROID, \"/InvalidPath/\")\n", " + makeArg(argsIdentifier.VERYVERBOSE)\n", " +\n", " // makeArg(argsIdentifier.STREAM)\n", " makeArg(argsIdentifier.PRETTY)\n", " + makeArg(argsIdentifier.JAVA, java_home)\n", " + makeArg(argsIdentifier.OUT, fileOut);\n", "\n", " try {\n", " EntryPoint.main(args.split(\" \"));\n", " Report report = Report.deserialize(new File(fileOut), type);\n", "\n", " assertFalse(report.getIssues().isEmpty());\n", " assertTrue(\n", " report.getIssues().stream()\n", " .anyMatch(\n", " bugInstance -> {\n", " try {\n", " return bugInstance\n", " .getFullPath()\n", " .contains(Utils.retrieveFullyQualifiedName(source));\n", " } catch (ExceptionHandler e) {\n", " assertNull(e);\n", " e.printStackTrace();\n", " }\n", " return false;\n", " }));\n", " print(fileOut);\n", " } catch (Exception e) {\n", " e.printStackTrace();\n", " assertNull(e);\n", " }\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "main_TestableFile_VerySimple_XML()" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "public void main_TestableFile_VerySimple_YAML() {\n", " G.reset();\n", " soot.G.v().reset();\n", "\n", " String source = verySimple_Klass;\n", " String fileOut = verySimple_Klass_yaml_1;\n", " Listing type = Listing.YAMLGeneric;\n", "\n", " new File(fileOut).delete();\n", " if (isLinux) {\n", " String args =\n", " makeArg(argsIdentifier.FORMAT, EngineType.CLASSFILES)\n", " + makeArg(argsIdentifier.FORMATOUT, type)\n", " + makeArg(argsIdentifier.SOURCE, source)\n", " + makeArg(argsIdentifier.NOEXIT)\n", " + makeArg(argsIdentifier.ANDROID, \"/InvalidPath/\")\n", " + makeArg(argsIdentifier.VERYVERBOSE)\n", " +\n", " // makeArg(argsIdentifier.STREAM)\n", " makeArg(argsIdentifier.PRETTY)\n", " + makeArg(argsIdentifier.JAVA, java_home)\n", " + makeArg(argsIdentifier.OUT, fileOut);\n", "\n", " try {\n", " EntryPoint.main(args.split(\" \"));\n", " Report report = Report.deserialize(new File(fileOut), type);\n", "\n", " assertFalse(report.getIssues().isEmpty());\n", " assertTrue(\n", " report.getIssues().stream()\n", " .anyMatch(\n", " bugInstance -> {\n", " try {\n", " return bugInstance\n", " .getFullPath()\n", " .contains(Utils.retrieveFullyQualifiedName(source));\n", " } catch (ExceptionHandler e) {\n", " assertNull(e);\n", " e.printStackTrace();\n", " }\n", " return false;\n", " }));\n", " print(fileOut);\n", " } catch (Exception e) {\n", " e.printStackTrace();\n", " assertNull(e);\n", " }\n", " }\n", "}" ] }, { "cell_type": "code", "execution_count": 0, "metadata": {}, "outputs": [], "source": [ "main_TestableFile_VerySimple_YAML()" ] } ], "metadata": { "kernelspec": { "display_name": "Java", "language": "java", "name": "java" }, "language_info": { "codemirror_mode": "java", "file_extension": ".jshell", "mimetype": "text/x-java-source", "name": "Java", "pygments_lexer": "java", "version": "11.0.7+10" } }, "nbformat": 4, "nbformat_minor": 4 }