From 59ee7343f41ac363e32895804379d1f3b841bff6 Mon Sep 17 00:00:00 2001 From: Rahim Mayaba Date: Mon, 28 Aug 2023 16:15:53 -0400 Subject: [PATCH] Added unit tests to test updated Soot on a Java 17 compiled JAR --- .../src/test/java/SootCallGraphTest.java | 34 ++++++++-- .../src/test/resources/Examples17.java | 63 ++++++++++++++++++ .../src/test/resources/examples17.jar | Bin 0 -> 5666 bytes 3 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 lang-java-reach-soot/src/test/resources/Examples17.java create mode 100644 lang-java-reach-soot/src/test/resources/examples17.jar diff --git a/lang-java-reach-soot/src/test/java/SootCallGraphTest.java b/lang-java-reach-soot/src/test/java/SootCallGraphTest.java index 89d724506..27494bfb5 100644 --- a/lang-java-reach-soot/src/test/java/SootCallGraphTest.java +++ b/lang-java-reach-soot/src/test/java/SootCallGraphTest.java @@ -54,12 +54,12 @@ private GoalContext getGoalContext() { return ctx; } - private void runSootAnalysis() { + private void runSootAnalysis(String jarPAth) { final ReachabilityAnalyzer ra = new ReachabilityAnalyzer(this.getGoalContext()); ra.setCallgraphConstructor(SootCallgraphConstructor.FRAMEWORK, false); // Set classpaths final Set app_paths = new HashSet(), dep_paths = new HashSet(); - app_paths.add(Paths.get("./src/test/resources/examples.jar")); + app_paths.add(Paths.get(jarPAth)); dep_paths.add(Paths.get("./src/test/resources/empty.jar")); ra.setAppClasspaths(app_paths); ra.setDependencyClasspaths(dep_paths); @@ -111,7 +111,13 @@ public void callgraphServiceRegistered() { @Test public void examplesSootTestNoneEntrypointGenerator() { VulasConfiguration.getGlobal().setProperty("vulas.reach.soot.entrypointGenerator", "none"); - runSootAnalysis(); + runSootAnalysis("./src/test/resources/examples.jar"); + } + + @Test + public void examplesSootTestNoneEntrypointGeneratorJDK17() { + VulasConfiguration.getGlobal().setProperty("vulas.reach.soot.entrypointGenerator", "none"); + runSootAnalysis("./src/test/resources/examples17.jar"); } @Test @@ -120,7 +126,16 @@ public void examplesSootTestDefaultEntryPointGenerator() { .setProperty( "vulas.reach.soot.entrypointGenerator", "soot.jimple.infoflow.entryPointCreators.DefaultEntryPointCreator"); - runSootAnalysis(); + runSootAnalysis("./src/test/resources/examples.jar"); + } + + @Test + public void examplesSootTestDefaultEntryPointGeneratorJDK17() { + VulasConfiguration.getGlobal() + .setProperty( + "vulas.reach.soot.entrypointGenerator", + "soot.jimple.infoflow.entryPointCreators.DefaultEntryPointCreator"); + runSootAnalysis("./src/test/resources/examples17.jar"); } @Test @@ -129,6 +144,15 @@ public void examplesSootTestCustomEntryPointGenerator() { .setProperty( "vulas.reach.soot.entrypointGenerator", "org.eclipse.steady.cg.soot.CustomEntryPointCreator"); - runSootAnalysis(); + runSootAnalysis("./src/test/resources/examples.jar"); + } + + @Test + public void examplesSootTestCustomEntryPointGeneratorJDK17() { + VulasConfiguration.getGlobal() + .setProperty( + "vulas.reach.soot.entrypointGenerator", + "org.eclipse.steady.cg.soot.CustomEntryPointCreator"); + runSootAnalysis("./src/test/resources/examples17.jar"); } } diff --git a/lang-java-reach-soot/src/test/resources/Examples17.java b/lang-java-reach-soot/src/test/resources/Examples17.java new file mode 100644 index 000000000..b88e41935 --- /dev/null +++ b/lang-java-reach-soot/src/test/resources/Examples17.java @@ -0,0 +1,63 @@ +package com.sap.psr.vulas.cg.test; + +import java.util.SortedSet; +import java.util.TreeSet; + +sealed abstract class Animal implements Comparable permits Cat, Dog, Fish { + + public abstract void saySomething(); + + public int compareTo(Animal _a) { + return getClass().getName().compareTo(_a.getClass().getName()); + } +} + +final class Cat extends Animal { + public void saySomething() { + System.out.println("purr"); + } +} + +final class Dog extends Animal { + public void saySomething() { + System.out.println("woof"); + } +} + +final class Fish extends Animal { + public void saySomething() { + System.out.println("..."); + } +} + +class Car { + public void saySomething() { + System.out.println("honk!"); + } +} + +public class Examples { + static SortedSet animals = new TreeSet<>(); + + private static Animal createFish() { + return new Fish(); + } + + private static Animal createCat() { + Animal cat = new Cat(); + animals.add(cat); + return cat; + } + + public static void main(String[] args) { + Animal animal; + if (args.length == 0) { + animal = createCat(); + animal.saySomething(); + } else { + animal = createFish(); + animal.saySomething(); + } + } +} + diff --git a/lang-java-reach-soot/src/test/resources/examples17.jar b/lang-java-reach-soot/src/test/resources/examples17.jar new file mode 100644 index 0000000000000000000000000000000000000000..215b20326c7c032c2ba0e2bf8072c218f9aa41cb GIT binary patch literal 5666 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 Nm30CDuqMO)`aj^1Cz}8O literal 0 HcmV?d00001