/*
* Copyright 2016 Naver Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.bootstrap.config;
import org.junit.Assert;
import org.junit.Test;
import static com.navercorp.pinpoint.bootstrap.config.Filter.*;
import static org.hamcrest.core.Is.is;
/**
* @author HyunGil Jeong
*/
public class ExcludePathFilterTest {
@Test
public void testNotFiltered() {
Filter<String> filter = new ExcludePathFilter("/exclude/*");
assertNotFiltered(filter, null);
assertNotFiltered(filter, "");
assertNotFiltered(filter, "/");
assertNotFiltered(filter, "a");
assertNotFiltered(filter, "/include");
assertNotFiltered(filter, "/include/a");
assertNotFiltered(filter, "/exclude");
assertNotFiltered(filter, "/exclude/a/b");
}
@Test
public void testExactMatchFiltering() {
Filter<String> filter = new ExcludePathFilter("/a/b/c");
assertFiltered(filter, "/a/b/c");
assertNotFiltered(filter, "a/b/c");
assertNotFiltered(filter, "/a/b/c/");
}
@Test
public void testWildcardFiltering() {
Filter<String> filter = new ExcludePathFilter("a?c, d??f");
assertFiltered(filter, "abc");
assertFiltered(filter, "dabf");
assertNotFiltered(filter, "ac");
assertNotFiltered(filter, "def");
}
@Test
public void testSingleLevelFiltering() {
Filter<String> filter = new ExcludePathFilter("/exclude/*, /*/exclude, /exclude/*/this");
assertFiltered(filter, "/exclude/");
assertFiltered(filter, "/exclude/a");
assertFiltered(filter, "/a/exclude");
assertFiltered(filter, "/exclude/a/this");
assertNotFiltered(filter, "exclude");
assertNotFiltered(filter, "/exclude");
assertNotFiltered(filter, "/exclude/a/b");
assertNotFiltered(filter, "a/exclude");
assertNotFiltered(filter, "/a/b/exclude");
assertNotFiltered(filter, "/exclude/a/b/this");
}
@Test
public void testMultipleLevelFiltering() {
Filter<String> filter = new ExcludePathFilter("/exclude/**, /**/exclude, /something/**/else");
assertFiltered(filter, "/exclude/a");
assertFiltered(filter, "/exclude/a/b");
assertFiltered(filter, "/a/exclude");
assertFiltered(filter, "/a/b/exclude");
assertFiltered(filter, "/something/else");
assertFiltered(filter, "/something/a/else");
assertFiltered(filter, "/something/a/b/else");
assertNotFiltered(filter, "a/exclude");
assertNotFiltered(filter, "something/else");
}
private void assertFiltered(Filter<String> filter, String testValue) {
Assert.assertThat(filter.filter(testValue), is(FILTERED));
}
private void assertNotFiltered(Filter<String> filter, String testValue) {
Assert.assertThat(filter.filter(testValue), is(NOT_FILTERED));
}
// Tests for urls
@Test
public void testFilter() throws Exception {
Filter<String> filter = new ExcludePathFilter("/monitor/l7check.html, test/l4check.html");
assertFilter(filter);
}
@Test
public void testFilter_InvalidExcludeURL() throws Exception {
Filter<String> filter = new ExcludePathFilter("/monitor/l7check.html, test/l4check.html, ,,");
assertFilter(filter);
}
@Test
public void testFilter_emptyExcludeURL() throws Exception {
Filter<String> filter = new ExcludePathFilter("");
Assert.assertFalse(filter.filter("/monitor/l7check.html"));
Assert.assertFalse(filter.filter("test/l4check.html"));
Assert.assertFalse(filter.filter("test/"));
Assert.assertFalse(filter.filter("test/l4check.htm"));
}
private void assertFilter(Filter<String> filter) {
Assert.assertTrue(filter.filter("/monitor/l7check.html"));
Assert.assertTrue(filter.filter("test/l4check.html"));
Assert.assertFalse(filter.filter("test/"));
Assert.assertFalse(filter.filter("test/l4check.htm"));
Assert.assertFalse(filter.filter(null));
Assert.assertFalse(filter.filter(""));
}
@Test
public void antStylePath() throws Exception {
Filter<String> filter = new ExcludePathFilter("/monitor/l7check.*,/*/l7check.*");
Assert.assertTrue(filter.filter("/monitor/l7check.jsp"));
Assert.assertTrue(filter.filter("/monitor/l7check.html"));
Assert.assertFalse(filter.filter("/monitor/test.jsp"));
Assert.assertTrue(filter.filter("/*/l7check.html"));
Assert.assertFalse(filter.filter(null));
Assert.assertFalse(filter.filter(""));
}
@Test
public void antstyle_equals_match() throws Exception {
Filter<String> filter = new ExcludePathFilter("/monitor/stringEquals,/monitor/antstyle.*");
Assert.assertTrue(filter.filter("/monitor/stringEquals"));
Assert.assertTrue(filter.filter("/monitor/antstyle.html"));
Assert.assertFalse(filter.filter("/monitor/stringEquals.test"));
Assert.assertFalse(filter.filter("/monitor/antstyleXXX.html"));
}
}