package org.gridkit.jvmtool.stacktrace.analytics;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.gridkit.jvmtool.stacktrace.ReaderProxy;
import org.gridkit.jvmtool.stacktrace.StackTraceCodec;
import org.gridkit.jvmtool.stacktrace.StackTraceReader;
import org.gridkit.jvmtool.stacktrace.ThreadSnapshot;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class FilterParserCorpusTest {
private static List<Object[]> cases = new ArrayList<Object[]>();
@Parameters(name = "\"{0}\" {1}")
public static List<Object[]> getExpressions() {
addCase(10912, "**");
addCase(10912, "org.apache.catalina.connector.CoyoteAdapter.service");
addCase(1467, "**.CoyoteAdapter.service+org.jboss.jca.adapters.jdbc,javax.jdbc");
addCase(2891, "**.CoyoteAdapter.service+org.hibernate.internal.SessionImpl.autoFlushIfRequired");
addCase(2605, "**.CoyoteAdapter.service+org.hibernate.internal.SessionImpl.autoFlushIfRequired!org.jboss.jca.adapters.jdbc,javax.jdbc");
addCase(439, "**.CoyoteAdapter.service+org.hibernate.!org.hibernate.internal.SessionImpl.autoFlushIfRequired!org.jboss.jca.adapters.jdbc,javax.jdbc");
addCase(1544, "**.CoyoteAdapter.service+com.sun.faces.facelets.compiler.Compiler.compile");
addCase(1287, "**.CoyoteAdapter.service+javax.xml.");
addCase(38, "**.CoyoteAdapter.service+javax.xml.!com.sun.faces.facelets.compiler.Compiler.compile");
addCase(256, "**.CoyoteAdapter.service+java.util.ResourceBundle.getObject*ResourceBundle.java:395");
addCase(256, "**.CoyoteAdapter.service+java.util.ResourceBundle.getObject*:395");
addCase(933, "**.CoyoteAdapter.service+java.util.ResourceBundle.getObject");
addCase(677, "**.CoyoteAdapter.service+java.util.ResourceBundle.getObject!java.util.ResourceBundle.getObject*:395");
addCase(3584, "**.CoyoteAdapter.service+org.jboss.seam.core.BijectionInterceptor.aroundInvoke,org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke+**.proceed");
addCase(0, "**.CoyoteAdapter.service+org.jboss.seam.core.BijectionInterceptor.aroundInvoke,org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke!**.proceed");
addCase(1362, "**.CoyoteAdapter.service+org.jboss.seam.core.BijectionInterceptor.aroundInvoke,org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke/!**.proceed");
addCase(934, "**.CoyoteAdapter.service+org.jboss.seam.core.BijectionInterceptor.aroundInvoke,org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke/!**.proceed+org.jboss.seam.Component.*ject");
addCase(428, "**.CoyoteAdapter.service+org.jboss.seam.core.BijectionInterceptor.aroundInvoke,org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke/!**.proceed+java.util.concurrent.locks.ReentrantLock");
addCase(2891, "org.hibernate/^+**.onAutoFlush");
addCase(1542, "org.hibernate/^!**.onAutoFlush");
return cases;
}
private static void addCase(int matchCount, String filter) {
cases.add(new Object[]{filter, matchCount});
}
private String filter;
private int matchCount;
public FilterParserCorpusTest(String filter, int matchCount) {
this.filter = filter;
this.matchCount = matchCount;
}
@Test
public void verify() throws FileNotFoundException, IOException {
ThreadSnapshotFilter f = TraceFilterPredicateParser.parseFilter(filter, new CachingFilterFactory());
StackTraceReader reader = StackTraceCodec.newReader(new FileInputStream("src/test/resources/jboss-10k.std"));
int n = 0;
if (!reader.isLoaded()) {
reader.loadNext();
}
ThreadSnapshot readerProxy = new ReaderProxy(reader);
while(reader.isLoaded()) {
if (f.evaluate(readerProxy)) {
++n;
}
if (!reader.loadNext()) {
break;
}
}
Assert.assertEquals(matchCount, n);
}
}