fixed test issue, made tests simpler, added default Main

This commit is contained in:
Sander Hautvast 2014-10-03 10:01:43 +02:00
parent 254fef17af
commit dab266b9e3
18 changed files with 58 additions and 149 deletions

View file

@ -46,3 +46,6 @@ dependencies{
testCompile 'javax.annotation:jsr250-api:1.0' testCompile 'javax.annotation:jsr250-api:1.0'
} }
springBoot {
mainClass = "yooze.application.YoozeServer"
}

View file

@ -10,6 +10,11 @@ import yooze.domain.ClassModel;
public class ClassCache { public class ClassCache {
private final Map<String, ClassModel> entries = new ConcurrentHashMap<String, ClassModel>(); private final Map<String, ClassModel> entries = new ConcurrentHashMap<String, ClassModel>();
private InclusionDecider inclusionDecider; private InclusionDecider inclusionDecider;
private final static ClassCache instance = new ClassCache();
private ClassCache() {
}
public boolean contains(String classname) { public boolean contains(String classname) {
return entries.containsKey(classname); return entries.containsKey(classname);
@ -47,4 +52,8 @@ public class ClassCache {
this.inclusionDecider = inclusionDecider; this.inclusionDecider = inclusionDecider;
} }
public static ClassCache getInstance() {
return instance;
}
} }

View file

@ -22,9 +22,15 @@ public class ClassModelBuilder {
private static Logger log = LoggerFactory.getLogger(ClassModelBuilder.class); private static Logger log = LoggerFactory.getLogger(ClassModelBuilder.class);
private ClassPool pool; private ClassPool pool;
private InclusionDecider inclusionDecider; private final InclusionDecider inclusionDecider;
private ClassCache classCache; private ClassCache classCache;
public ClassModelBuilder(InclusionDecider inclusionDecider) {
this.inclusionDecider = inclusionDecider;
classCache = ClassCache.getInstance();
classCache.setInclusionDecider(inclusionDecider);
}
public ClassModel scanClassOrSkip(String className) { public ClassModel scanClassOrSkip(String className) {
if (inclusionDecider.shouldSkip(className)) if (inclusionDecider.shouldSkip(className))
return null; return null;
@ -55,6 +61,7 @@ public class ClassModelBuilder {
resolveMethodReferences(); resolveMethodReferences();
return model; return model;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
System.out.println(e.getClass().getName() + ":" + e.getMessage()); System.out.println(e.getClass().getName() + ":" + e.getMessage());
return null; return null;
} }
@ -110,15 +117,8 @@ public class ClassModelBuilder {
} }
} }
public void setInclusionDecider(InclusionDecider inclusionDecider) {
this.inclusionDecider = inclusionDecider;
}
public void setPool(ClassPool pool) { public void setPool(ClassPool pool) {
this.pool = pool; this.pool = pool;
} }
public void setClassCache(ClassCache classCache) {
this.classCache = classCache;
}
} }

View file

@ -75,6 +75,12 @@ public class GraphBuilder {
Graph graph = createClassDependencyGraph(pool, cpList, className, e); Graph graph = createClassDependencyGraph(pool, cpList, className, e);
graph.setName(archiveFile.getName()); graph.setName(archiveFile.getName());
// leave ClassPool in original state, because getDefault will always
// return the same instance
for (ClassPath cp : cpList) {
pool.removeClassPath(cp);
}
return graph; return graph;
} }

View file

@ -33,8 +33,7 @@ public class Yooze {
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageExcludePatterns(packageExcludePatterns); i.setPackageExcludePatterns(packageExcludePatterns);
i.setPackageIncludePatterns(packageIncludePatterns); i.setPackageIncludePatterns(packageIncludePatterns);
ClassModelBuilder classModelBuilder = new ClassModelBuilder(); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
classModelBuilder.setInclusionDecider(i);
libDirectoryBuilder.setClassModelBuilder(classModelBuilder); libDirectoryBuilder.setClassModelBuilder(classModelBuilder);
Graph graph = libDirectoryBuilder.build(archive, startingClass); Graph graph = libDirectoryBuilder.build(archive, startingClass);

View file

@ -109,17 +109,15 @@ public class YoozeServer {
@PostConstruct @PostConstruct
public void startup() throws IOException { public void startup() throws IOException {
InclusionDecider i = new InclusionDecider(); InclusionDecider inclusionDecider = new InclusionDecider();
i.setPackageExcludePatterns("java\\."); inclusionDecider.setPackageExcludePatterns("java\\.");
i.setPackageIncludePatterns("org"); inclusionDecider.setPackageIncludePatterns("org");
GraphBuilder directoryBuilder = GraphBuilderFactory.getJarBuilder(); GraphBuilder directoryBuilder = GraphBuilderFactory.getJarBuilder();
classCache = new ClassCache(); classCache = ClassCache.getInstance();
classCache.setInclusionDecider(i); classCache.setInclusionDecider(inclusionDecider);
ClassModelBuilder classModelBuilder = new ClassModelBuilder(); ClassModelBuilder classModelBuilder = new ClassModelBuilder(inclusionDecider);
classModelBuilder.setClassCache(classCache);
directoryBuilder.setClassModelBuilder(classModelBuilder); directoryBuilder.setClassModelBuilder(classModelBuilder);
classModelBuilder.setInclusionDecider(i);
raw = directoryBuilder.build("src/test/resources/commons-io-1.4.jar", null); raw = directoryBuilder.build("src/test/resources/commons-io-1.4.jar", null);
} }

View file

@ -1,6 +1,7 @@
package yooze.domain; package yooze.domain;
import javassist.CtClass; import javassist.CtClass;
import yooze.ClassCache;
public class ParameterModel { public class ParameterModel {
private ClassModel type; private ClassModel type;
@ -8,10 +9,10 @@ public class ParameterModel {
public ParameterModel(CtClass typeAsCtClass) { public ParameterModel(CtClass typeAsCtClass) {
String classname = typeAsCtClass.getName(); String classname = typeAsCtClass.getName();
// type = ClassCache.get(classname); type = ClassCache.getInstance().get(classname);
// if (type == null) { if (type == null) {
// type = ClassCache.createNewDummyModel(classname); type = ClassCache.getInstance().createNewDummyModel(classname);
// } }
name = "";// javassist doesn't give me this (?) name = "";// javassist doesn't give me this (?)
} }

View file

@ -0,0 +1,2 @@
Manifest-Version: 1.0
Main-Class: yooze.application.YoozeServer

View file

@ -1,26 +0,0 @@
package yooze;
import java.io.File;
public class Config {
private File earFile;
private File tgzFile;
public void setEarFile(File earFile) {
this.earFile = earFile;
}
public File getEarFile() {
return earFile;
}
public File getTgzFile() {
return tgzFile;
}
public void setTgzFile(File tgzFile) {
this.tgzFile = tgzFile;
}
}

View file

@ -7,32 +7,20 @@ import java.io.IOException;
import junit.framework.Assert; import junit.framework.Assert;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import yooze.application.GraphBuilderFactory; import yooze.application.GraphBuilderFactory;
import yooze.domain.ClassModel; import yooze.domain.ClassModel;
import yooze.domain.Graph; import yooze.domain.Graph;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class GraphTest { public class GraphTest {
@Test @Test
public void buildGraph() throws IOException { public void buildGraph() throws IOException {
// new Yooze("/tmp/test").createNeoGraph("target/test-classes",
// ".*?.Class.");
GraphBuilder libDirectoryBuilder = GraphBuilderFactory.getClassesDirectoryBuilder(); GraphBuilder libDirectoryBuilder = GraphBuilderFactory.getClassesDirectoryBuilder();
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageIncludePatterns(".*?.Class."); i.setPackageIncludePatterns(".*?.Class.");
i.setPackageExcludePatterns(""); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
ClassModelBuilder classModelBuilder = new ClassModelBuilder();
classModelBuilder.setInclusionDecider(i);
libDirectoryBuilder.setClassModelBuilder(classModelBuilder); libDirectoryBuilder.setClassModelBuilder(classModelBuilder);
Graph graph = libDirectoryBuilder.build("target/test-classes", "yooze.Class1"); Graph graph = libDirectoryBuilder.build("target/test-classes", "yooze.Class1");

View file

@ -4,25 +4,14 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import yooze.application.GraphBuilderFactory; import yooze.application.GraphBuilderFactory;
import yooze.domain.Graph; import yooze.domain.Graph;
import yooze.output.DotPrinter; import yooze.output.DotPrinter;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class LargePackageTest { public class LargePackageTest {
@Autowired
private Config config;
@Test @Test
public void largePackage() throws IOException { public void largePackage() throws IOException {
GraphBuilder earBuilder = GraphBuilderFactory.getEarBuilder(); GraphBuilder earBuilder = GraphBuilderFactory.getEarBuilder();
@ -30,22 +19,14 @@ public class LargePackageTest {
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageIncludePatterns(""); i.setPackageIncludePatterns("");
i.setPackageExcludePatterns("java.*"); i.setPackageExcludePatterns("java.*");
ClassModelBuilder classModelBuilder = new ClassModelBuilder(); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
classModelBuilder.setInclusionDecider(i);
earBuilder.setClassModelBuilder(classModelBuilder); earBuilder.setClassModelBuilder(classModelBuilder);
Graph graph = earBuilder.build(config.getEarFile(), "java.lang.String"); Graph graph = earBuilder.build(new DefaultResourceLoader().getResource("classpath:examples.ear").getFile(),
"java.lang.String");
DotPrinter dotPrinter = new DotPrinter(new FileOutputStream("/tmp/example.dot")); DotPrinter dotPrinter = new DotPrinter(new FileOutputStream("/tmp/example.dot"));
dotPrinter.print(graph); dotPrinter.print(graph);
dotPrinter.close(); dotPrinter.close();
} }
public Config getConfig() {
return config;
}
public void setConfig(Config config) {
this.config = config;
}
} }

View file

@ -10,19 +10,11 @@ import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectMapper;
import org.junit.After; import org.junit.After;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import yooze.application.GraphBuilderFactory; import yooze.application.GraphBuilderFactory;
import yooze.domain.MethodModel; import yooze.domain.MethodModel;
import yooze.dto.MethodDto; import yooze.dto.MethodDto;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class MethodReferencesTest { public class MethodReferencesTest {
@After @After
@ -36,8 +28,7 @@ public class MethodReferencesTest {
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageIncludePatterns("yooze.Class.*"); i.setPackageIncludePatterns("yooze.Class.*");
ClassModelBuilder classModelBuilder = new ClassModelBuilder(); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
classModelBuilder.setInclusionDecider(i);
directoryBuilder.setClassModelBuilder(classModelBuilder); directoryBuilder.setClassModelBuilder(classModelBuilder);
directoryBuilder.build("target/test-classes", "yooze.Class1"); directoryBuilder.build("target/test-classes", "yooze.Class1");

View file

@ -6,34 +6,25 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import yooze.application.GraphBuilderFactory; import yooze.application.GraphBuilderFactory;
import yooze.domain.ClassModel; import yooze.domain.ClassModel;
import yooze.domain.Graph; import yooze.domain.Graph;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
public class TgzBuilderTest { public class TgzBuilderTest {
@Autowired
private Config config;
@Test @Test
public void tgzBuilder() throws IOException { public void tgzBuilder() throws IOException {
GraphBuilder tgzBuilder = GraphBuilderFactory.getDefaultTgzBuilder(); GraphBuilder tgzBuilder = GraphBuilderFactory.getDefaultTgzBuilder();
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageIncludePatterns("nl.*"); i.setPackageIncludePatterns("nl\\.");
i.setPackageExcludePatterns(""); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
ClassModelBuilder classModelBuilder = new ClassModelBuilder();
classModelBuilder.setInclusionDecider(i);
tgzBuilder.setClassModelBuilder(classModelBuilder); tgzBuilder.setClassModelBuilder(classModelBuilder);
Graph graph = tgzBuilder.build(config.getTgzFile(), "nl.jssl.jas.Main"); Graph graph = tgzBuilder.build(new DefaultResourceLoader().getResource("classpath:agent.tar.gz").getFile(),
"nl.jssl.jas.Main");
ArrayList<String> names = new ArrayList<String>(); ArrayList<String> names = new ArrayList<String>();
@ -43,7 +34,4 @@ public class TgzBuilderTest {
assertTrue(names.contains("nl.jssl.jas.Main")); assertTrue(names.contains("nl.jssl.jas.Main"));
} }
public void setConfig(Config config) {
this.config = config;
}
} }

View file

@ -6,9 +6,6 @@ import java.io.IOException;
import junit.framework.Assert; import junit.framework.Assert;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import yooze.ClassModelBuilder; import yooze.ClassModelBuilder;
import yooze.GraphBuilder; import yooze.GraphBuilder;
@ -16,8 +13,6 @@ import yooze.InclusionDecider;
import yooze.application.GraphBuilderFactory; import yooze.application.GraphBuilderFactory;
import yooze.domain.Graph; import yooze.domain.Graph;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
public class DotPrinterTest { public class DotPrinterTest {
@Test @Test
@ -26,8 +21,7 @@ public class DotPrinterTest {
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageExcludePatterns(".*?Class4"); i.setPackageExcludePatterns(".*?Class4");
i.setPackageIncludePatterns(".*?.Class."); i.setPackageIncludePatterns(".*?.Class.");
ClassModelBuilder classModelBuilder = new ClassModelBuilder(); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
classModelBuilder.setInclusionDecider(i);
directoryBuilder.setClassModelBuilder(classModelBuilder); directoryBuilder.setClassModelBuilder(classModelBuilder);
Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class1"); Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class1");
@ -57,10 +51,8 @@ public class DotPrinterTest {
GraphBuilder directoryBuilder = GraphBuilderFactory.getClassesDirectoryBuilder(); GraphBuilder directoryBuilder = GraphBuilderFactory.getClassesDirectoryBuilder();
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageExcludePatterns("");
i.setPackageIncludePatterns("yooze.Class4"); i.setPackageIncludePatterns("yooze.Class4");
ClassModelBuilder classModelBuilder = new ClassModelBuilder(); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
classModelBuilder.setInclusionDecider(i);
directoryBuilder.setClassModelBuilder(classModelBuilder); directoryBuilder.setClassModelBuilder(classModelBuilder);
Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class4"); Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class4");

View file

@ -22,8 +22,7 @@ public class JsonPrinterTest {
InclusionDecider i = new InclusionDecider(); InclusionDecider i = new InclusionDecider();
i.setPackageExcludePatterns(".*?Class4"); i.setPackageExcludePatterns(".*?Class4");
i.setPackageIncludePatterns(".*?.Class."); i.setPackageIncludePatterns(".*?.Class.");
ClassModelBuilder classModelBuilder = new ClassModelBuilder(); ClassModelBuilder classModelBuilder = new ClassModelBuilder(i);
classModelBuilder.setInclusionDecider(i);
directoryBuilder.setClassModelBuilder(classModelBuilder); directoryBuilder.setClassModelBuilder(classModelBuilder);
Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class1"); Graph graph = directoryBuilder.build("target/test-classes", "yooze.Class1");

View file

@ -8,24 +8,16 @@ import java.io.IOException;
import java.util.List; import java.util.List;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import yooze.Config;
import yooze.InspectableClasspath; import yooze.InspectableClasspath;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-test.xml")
public class EarScannerTest { public class EarScannerTest {
@Autowired
private Config config;
@Test @Test
public void scanner() throws IOException { public void scanner() throws IOException {
List<InspectableClasspath> classpaths = new ArchiveScanner(new WarScanner()).scanArchive(config.getEarFile()); List<InspectableClasspath> classpaths = new ArchiveScanner(new WarScanner())
.scanArchive(new DefaultResourceLoader().getResource("classpath:examples.ear").getFile());
for (InspectableClasspath path : classpaths) { for (InspectableClasspath path : classpaths) {
if (path instanceof DirClassPath) { if (path instanceof DirClassPath) {
List<String> classes = ((InspectableClasspath) path).getClasses(); List<String> classes = ((InspectableClasspath) path).getClasses();
@ -40,9 +32,4 @@ public class EarScannerTest {
} }
} }
} }
public void setConfig(Config config) {
this.config = config;
}
} }

View file

@ -13,7 +13,7 @@ public class LibScannerTest {
@Test @Test
public void directoryWithoutJars_isNotAClasspathEntry() throws IOException { public void directoryWithoutJars_isNotAClasspathEntry() throws IOException {
LibScanner libScanner = new LibScanner(); LibScanner libScanner = new LibScanner();
List<InspectableClasspath> classpathList = libScanner.scanArchive("src"); List<InspectableClasspath> classpathList = libScanner.scanArchive("src/main");
assertTrue("This should be empty", classpathList.isEmpty()); assertTrue("This should be empty", classpathList.isEmpty());
} }
} }

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="config" class="yooze.Config">
<property name="earFile" value="classpath:examples.ear"></property>
<property name="tgzFile" value="classpath:agent.tar.gz"></property>
</bean>
</beans>