package com.etsy.statsd.profiler.util;
import com.etsy.statsd.profiler.profilers.CPUTracingProfiler;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
import static org.junit.Assert.*;
public class StackTraceFilterTest {
private static StackTraceFilter filter;
private static List<String> includePackages;
private static List<String> excludedTraces;
private static List<String> includedTraces;
private static List<String> otherTraces;
@BeforeClass
public static void setup() {
includePackages = Arrays.asList("com.etsy", "com.twitter.scalding");
filter = new StackTraceFilter(includePackages, CPUTracingProfiler.EXCLUDE_PACKAGES);
excludedTraces = Arrays.asList("com-etsy-statsd-profiler-profiler-util-StackTraceFormatter-formatStackTraceElement", "com-timgroup-statsd-StatsDClient-send", "com-etsy-statsd-profiler-profiler-util-StackTraceFormatter-formatStackTraceElement.com-etsy-Foo-fooTest");
includedTraces = Collections.singletonList("com-etsy-foo-fooTest");
otherTraces = Collections.singletonList("com-google-guava-Foo-helloWorld");
}
@Test
public void testGetPackagePattern() {
Pattern expected = Pattern.compile("(.*\\.|^)((com-etsy)|(com-twitter-scalding)).*");
assertEquals(expected.toString(), filter.getPackagePattern(includePackages, StackTraceFilter.MATCH_EVERYTHING).toString());
assertEquals(StackTraceFilter.MATCH_EVERYTHING.toString(), filter.getPackagePattern(null, StackTraceFilter.MATCH_EVERYTHING).toString());
assertEquals(StackTraceFilter.MATCH_EVERYTHING.toString(), filter.getPackagePattern(new ArrayList<String>(), StackTraceFilter.MATCH_EVERYTHING).toString());
}
@Test
public void testExcludeMatches() {
for (String e : excludedTraces) {
assertTrue(e, filter.excludeMatches(e));
}
for (String i : includedTraces) {
assertFalse(i, filter.excludeMatches(i));
}
for (String o : otherTraces) {
assertFalse(o, filter.excludeMatches(o));
}
}
@Test
public void testIncludeMatches() {
for (String i : includedTraces) {
assertTrue(i, filter.includeMatches(i));
}
for (String o : otherTraces) {
assertFalse(o, filter.includeMatches(o));
}
}
@Test
public void testIncludeStackTrace() {
for (String e : excludedTraces) {
assertFalse(e, filter.includeStackTrace(e));
}
for (String i : includedTraces) {
assertTrue(i, filter.includeStackTrace(i));
}
for (String o : otherTraces) {
assertFalse(o, filter.includeStackTrace(o));
}
}
}