]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10601 add header "Sonar-Version" to WS responses
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 18 Apr 2018 07:56:28 +0000 (09:56 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 10 May 2018 18:20:53 +0000 (20:20 +0200)
server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceFilter.java
server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceFilterTest.java

index 1efd88c106525c1d7160f4fba7c35834ea5f99ca..631be28f12c62286e686ac4c983da5fbd86950f8 100644 (file)
@@ -26,6 +26,7 @@ import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.sonar.api.SonarRuntime;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.api.web.ServletFilter;
 import org.sonar.core.util.stream.MoreCollectors;
@@ -48,8 +49,9 @@ public class WebServiceFilter extends ServletFilter {
   private final WebServiceEngine webServiceEngine;
   private final Set<String> includeUrls;
   private final Set<String> excludeUrls;
+  private final SonarRuntime runtime;
 
-  public WebServiceFilter(WebServiceEngine webServiceEngine) {
+  public WebServiceFilter(WebServiceEngine webServiceEngine, SonarRuntime runtime) {
     this.webServiceEngine = webServiceEngine;
     this.includeUrls = concat(
       Stream.of("/api/*"),
@@ -65,6 +67,7 @@ public class WebServiceFilter extends ServletFilter {
         .filter(action -> action.handler() instanceof ServletFilterHandler)
         .map(toPath()))
           .collect(MoreCollectors.toSet());
+    this.runtime = runtime;
   }
 
   @Override
@@ -81,6 +84,7 @@ public class WebServiceFilter extends ServletFilter {
     HttpServletResponse response = (HttpServletResponse) servletResponse;
     ServletRequest wsRequest = new ServletRequest(request);
     ServletResponse wsResponse = new ServletResponse(response);
+    wsResponse.setHeader("Sonar-Version", runtime.getApiVersion().toString());
     webServiceEngine.execute(wsRequest, wsResponse);
   }
 
index b2c7c21c3597757eda04effb7f22d4e54c088934..47911d3f877974144ef918c4c4981200701dcb47 100644 (file)
@@ -29,10 +29,14 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.sonar.api.SonarQubeSide;
+import org.sonar.api.SonarRuntime;
+import org.sonar.api.internal.SonarRuntimeImpl;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.RequestHandler;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
+import org.sonar.api.utils.Version;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -43,6 +47,8 @@ import static org.sonar.server.ws.WebServiceFilterTest.WsUrl.newWsUrl;
 
 public class WebServiceFilterTest {
 
+  private static final String RUNTIME_VERSION = "7.1.0.1234";
+
   @Rule
   public ExpectedException expectedException = ExpectedException.none();
 
@@ -52,7 +58,7 @@ public class WebServiceFilterTest {
   private HttpServletResponse response = mock(HttpServletResponse.class);
   private FilterChain chain = mock(FilterChain.class);
   private ServletOutputStream responseOutput = mock(ServletOutputStream.class);
-
+  private SonarRuntime runtime = SonarRuntimeImpl.forSonarQube(Version.parse(RUNTIME_VERSION), SonarQubeSide.SERVER);
   private WebServiceFilter underTest;
 
   @Before
@@ -93,8 +99,8 @@ public class WebServiceFilterTest {
   @Test
   public void does_not_match_servlet_filter_that_prefix_a_ws() {
     initWebServiceEngine(
-        newWsUrl("api/foo", "action").setHandler(ServletFilterHandler.INSTANCE),
-        newWsUrl("api/foo", "action_2"));
+      newWsUrl("api/foo", "action").setHandler(ServletFilterHandler.INSTANCE),
+      newWsUrl("api/foo", "action_2"));
 
     assertThat(underTest.doGetPattern().matches("/api/foo/action")).isFalse();
     assertThat(underTest.doGetPattern().matches("/api/foo/action_2")).isTrue();
@@ -109,12 +115,21 @@ public class WebServiceFilterTest {
   }
 
   @Test
-  public void execute_ws() throws Exception {
-    underTest = new WebServiceFilter(webServiceEngine);
+  public void execute_ws() {
+    underTest = new WebServiceFilter(webServiceEngine, runtime);
+
+    underTest.doFilter(request, response, chain);
+
+    verify(webServiceEngine).execute(any(), any());
+  }
+
+  @Test
+  public void add_version_to_response_headers() {
+    underTest = new WebServiceFilter(webServiceEngine, runtime);
 
     underTest.doFilter(request, response, chain);
 
-    verify(webServiceEngine).execute(any(ServletRequest.class), any(org.sonar.server.ws.ServletResponse.class));
+    verify(response).setHeader("Sonar-Version", RUNTIME_VERSION);
   }
 
   private void initWebServiceEngine(WsUrl... wsUrls) {
@@ -137,7 +152,7 @@ public class WebServiceFilterTest {
       controllers.add(wsController);
     }
     when(webServiceEngine.controllers()).thenReturn(controllers);
-    underTest = new WebServiceFilter(webServiceEngine);
+    underTest = new WebServiceFilter(webServiceEngine, runtime);
   }
 
   static final class WsUrl {