]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-9138 Improve logs displaying servlet filter patterns at server startup
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 14 Apr 2017 13:00:23 +0000 (15:00 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 18 Apr 2017 11:44:43 +0000 (13:44 +0200)
server/sonar-server/src/main/java/org/sonar/server/platform/web/MasterServletFilter.java
server/sonar-server/src/test/java/org/sonar/server/platform/web/MasterServletFilterTest.java
sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java
sonar-plugin-api/src/test/java/org/sonar/api/web/ServletFilterTest.java

index 9679d4e2c1b5bda977032bac3a9b9a76c7bdae12..af90a3a96ce1da0ffe11dfea87f774a7d2a1d0a1 100644 (file)
@@ -68,7 +68,7 @@ public class MasterServletFilter implements Filter {
     List<ServletFilter> filterList = Lists.newArrayList();
     for (ServletFilter extension : filterExtensions) {
       try {
-        Loggers.get(MasterServletFilter.class).info(String.format("Initializing servlet filter %s [pattern=%s]", extension, extension.doGetPattern()));
+        Loggers.get(MasterServletFilter.class).info(String.format("Initializing servlet filter %s [pattern=%s]", extension, extension.doGetPattern().label()));
         extension.init(config);
         filterList.add(extension);
       } catch (Exception e) {
index 59a01dcb095c2afdfbe7c43effdeef8f4f114c6a..4282814c38a0b596a141a3582519a584e2d42595 100644 (file)
@@ -32,7 +32,10 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.sonar.api.utils.log.LogTester;
+import org.sonar.api.utils.log.LoggerLevel;
 import org.sonar.api.web.ServletFilter;
+import org.sonar.api.web.ServletFilter.UrlPattern;
 
 import static java.util.Arrays.asList;
 import static java.util.Collections.singletonList;
@@ -48,6 +51,9 @@ public class MasterServletFilterTest {
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
 
+  @Rule
+  public LogTester logTester = new LogTester();
+
   @Before
   public void resetSingleton() {
     MasterServletFilter.INSTANCE = null;
@@ -55,7 +61,7 @@ public class MasterServletFilterTest {
 
   @Test
   public void should_init_and_destroy_filters() throws Exception {
-    ServletFilter filter = mock(ServletFilter.class);
+    ServletFilter filter = createMockFilter();
     FilterConfig config = mock(FilterConfig.class);
     MasterServletFilter master = new MasterServletFilter();
     master.init(config, singletonList(filter));
@@ -81,7 +87,7 @@ public class MasterServletFilterTest {
     expectedException.expect(IllegalStateException.class);
     expectedException.expectMessage("foo");
 
-    ServletFilter filter = mock(ServletFilter.class);
+    ServletFilter filter = createMockFilter();
     doThrow(new IllegalStateException("foo")).when(filter).init(any(FilterConfig.class));
 
     FilterConfig config = mock(FilterConfig.class);
@@ -122,6 +128,23 @@ public class MasterServletFilterTest {
     assertThat(filter2.count).isEqualTo(2);
   }
 
+  @Test
+  public void display_servlet_filter_patterns_in_INFO_log() throws Exception {
+    ServletFilter filter = new PatternFilter(UrlPattern.builder().includes("/api/issues").excludes("/batch/projects").build());
+    FilterConfig config = mock(FilterConfig.class);
+    MasterServletFilter master = new MasterServletFilter();
+
+    master.init(config, singletonList(filter));
+
+    assertThat(logTester.logs(LoggerLevel.INFO)).containsOnly("Initializing servlet filter PatternFilter [pattern=UrlPattern{inclusions=[/api/issues], exclusions=[/batch/projects]}]");
+  }
+
+  private static ServletFilter createMockFilter() {
+    ServletFilter filter = mock(ServletFilter.class);
+    when(filter.doGetPattern()).thenReturn(UrlPattern.builder().build());
+    return filter;
+  }
+
   private static final class TrueFilter extends ServletFilter {
     private static int globalCount = 0;
     private int count = 0;
@@ -142,4 +165,38 @@ public class MasterServletFilterTest {
     }
   }
 
+  private static class PatternFilter extends ServletFilter {
+
+    private final UrlPattern urlPattern;
+
+    PatternFilter(UrlPattern urlPattern) {
+      this.urlPattern = urlPattern;
+    }
+
+    @Override
+    public UrlPattern doGetPattern() {
+      return urlPattern;
+    }
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+      // Nothing to do
+    }
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+      // Nothing to do
+    }
+
+    @Override
+    public void destroy() {
+      // Nothing to do
+    }
+
+    @Override
+    public String toString() {
+      return "PatternFilter";
+    }
+  }
+
 }
index 927cbb6a33c4fa9556fc46de596cc91808b9a164..c71ec53ee43ebf48dfe409379fb4c2db717735e2 100644 (file)
@@ -102,6 +102,24 @@ public abstract class ServletFilter implements Filter {
       throw new IllegalStateException("this method is deprecated and should not be used anymore");
     }
 
+    public String label() {
+      return "UrlPattern{" +
+        "inclusions=[" + convertPatternsToString(inclusions) + "]" +
+        ", exclusions=[" + convertPatternsToString(exclusions) + "]" +
+        '}';
+    }
+
+    private static String convertPatternsToString(List<String> input) {
+      StringBuilder output = new StringBuilder();
+      if (input.isEmpty()) {
+        return "";
+      }
+      if (input.size() == 1) {
+        return output.append(input.get(0)).toString();
+      }
+      return output.append(input.get(0)).append(", ...").toString();
+    }
+
     /**
      * Defines only a single inclusion pattern. This is a shortcut for {@code builder().includes(inclusionPattern).build()}.
      */
index 21367e83ec449a01061c9930c5ab10271f2ad3c0..503a0732b88c4a2eadec5f02473569107275ed40 100644 (file)
@@ -228,6 +228,19 @@ public class ServletFilterTest {
       "/mstile*");
   }
 
+  @Test
+  public void test_label() throws Exception {
+    assertThat(ServletFilter.UrlPattern.builder().build().label()).isEqualTo("UrlPattern{inclusions=[], exclusions=[]}");
+    assertThat(ServletFilter.UrlPattern.builder()
+      .includes("/foo/*")
+      .excludes("/foo/login")
+      .build().label()).isEqualTo("UrlPattern{inclusions=[/foo/*], exclusions=[/foo/login]}");
+    assertThat(ServletFilter.UrlPattern.builder()
+      .includes("/foo/*", "/foo/lo*")
+      .excludes("/foo/login", "/foo/logout", "/foo/list")
+      .build().label()).isEqualTo("UrlPattern{inclusions=[/foo/*, ...], exclusions=[/foo/login, ...]}");
+  }
+
   private static class FakeFilter extends ServletFilter {
     @Override
     public UrlPattern doGetPattern() {