]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4843 move URL to /api/system/restart and complete ws-client
authorSimon Brandhof <simon.brandhof@gmail.com>
Fri, 21 Mar 2014 15:40:07 +0000 (16:40 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Fri, 21 Mar 2014 15:40:15 +0000 (16:40 +0100)
sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
sonar-server/src/main/java/org/sonar/server/platform/ws/PlatformWs.java [deleted file]
sonar-server/src/main/java/org/sonar/server/platform/ws/RestartHandler.java
sonar-server/src/main/java/org/sonar/server/platform/ws/SystemWs.java [new file with mode: 0644]
sonar-server/src/test/java/org/sonar/server/platform/ws/PlatformWsTest.java [deleted file]
sonar-server/src/test/java/org/sonar/server/platform/ws/RestartHandlerTest.java
sonar-server/src/test/java/org/sonar/server/platform/ws/SystemWsTest.java [new file with mode: 0644]
sonar-ws-client/src/main/java/org/sonar/wsclient/system/SystemClient.java
sonar-ws-client/src/main/java/org/sonar/wsclient/system/internal/DefaultSystemClient.java
sonar-ws-client/src/test/java/org/sonar/wsclient/system/internal/DefaultSystemClientTest.java

index d9dd54c0e010649fd235beb1ac55683623bed068..2c8b84ed6fa1296a35db5743353c989435de5fef 100644 (file)
@@ -95,7 +95,7 @@ import org.sonar.server.notifications.NotificationService;
 import org.sonar.server.permission.InternalPermissionService;
 import org.sonar.server.permission.InternalPermissionTemplateService;
 import org.sonar.server.permission.PermissionFinder;
-import org.sonar.server.platform.ws.PlatformWs;
+import org.sonar.server.platform.ws.SystemWs;
 import org.sonar.server.platform.ws.RestartHandler;
 import org.sonar.server.plugins.*;
 import org.sonar.server.qualitygate.QgateProjectFinder;
@@ -191,7 +191,7 @@ class ServerComponents {
 
       // ws
       RestartHandler.class,
-      PlatformWs.class
+      SystemWs.class
     );
   }
 
diff --git a/sonar-server/src/main/java/org/sonar/server/platform/ws/PlatformWs.java b/sonar-server/src/main/java/org/sonar/server/platform/ws/PlatformWs.java
deleted file mode 100644 (file)
index ee9b878..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-package org.sonar.server.platform.ws;
-
-import org.sonar.api.server.ws.WebService;
-
-public class PlatformWs implements WebService {
-
-  private final RestartHandler restartHandler;
-
-  public PlatformWs(RestartHandler restartHandler) {
-    this.restartHandler = restartHandler;
-  }
-
-  @Override
-  public void define(Context context) {
-    NewController controller = context.createController("api/platform")
-      .setSince("4.3");
-
-    restartHandler.define(controller);
-
-    controller.done();
-  }
-
-}
index 75b080a21f3de8ec9a37d7de5f52be9f71af3aa3..d40d0651887ae1f67e9b68324f2284c1b588378d 100644 (file)
@@ -26,7 +26,7 @@ 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.server.exceptions.BadRequestException;
+import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.platform.Platform;
 
 public class RestartHandler implements RequestHandler {
@@ -41,7 +41,7 @@ public class RestartHandler implements RequestHandler {
 
   void define(WebService.NewController controller) {
     controller.createAction("restart")
-      .setDescription("Restart server. Available only in development mode.")
+      .setDescription("Restart server. Available only on development mode (sonar.dev=true)")
       .setPost(true)
       .setHandler(this);
   }
@@ -56,7 +56,7 @@ public class RestartHandler implements RequestHandler {
       response.noContent();
 
     } else {
-      throw new BadRequestException("Available in development mode only (sonar.dev=true)");
+      throw new ForbiddenException();
     }
   }
 }
diff --git a/sonar-server/src/main/java/org/sonar/server/platform/ws/SystemWs.java b/sonar-server/src/main/java/org/sonar/server/platform/ws/SystemWs.java
new file mode 100644 (file)
index 0000000..282eb8b
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.ws;
+
+import org.sonar.api.server.ws.WebService;
+
+public class SystemWs implements WebService {
+
+  private final RestartHandler restartHandler;
+
+  public SystemWs(RestartHandler restartHandler) {
+    this.restartHandler = restartHandler;
+  }
+
+  @Override
+  public void define(Context context) {
+    NewController controller = context.createController("api/system")
+      .setSince("4.3");
+
+    restartHandler.define(controller);
+
+    controller.done();
+  }
+
+}
diff --git a/sonar-server/src/test/java/org/sonar/server/platform/ws/PlatformWsTest.java b/sonar-server/src/test/java/org/sonar/server/platform/ws/PlatformWsTest.java
deleted file mode 100644 (file)
index bd29268..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-package org.sonar.server.platform.ws;
-
-import org.junit.Test;
-import org.sonar.api.config.Settings;
-import org.sonar.api.server.ws.WebService;
-import org.sonar.server.platform.Platform;
-
-import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-
-public class PlatformWsTest {
-
-  @Test
-  public void define() throws Exception {
-    Platform platform = mock(Platform.class);
-    Settings settings = new Settings();
-    RestartHandler restartHandler = new RestartHandler(settings, platform);
-    PlatformWs ws = new PlatformWs(restartHandler);
-    WebService.Context context = new WebService.Context();
-
-    ws.define(context);
-
-    assertThat(context.controllers()).hasSize(1);
-    assertThat(context.controller("api/platform")).isNotNull();
-    assertThat(context.controller("api/platform").actions()).isNotEmpty();
-  }
-}
index 03b2b3d6428526b0f5a4e528a049044fa86d6cb7..ca18bb20d2f200838f1b16eafc2da402dcea0192 100644 (file)
@@ -22,10 +22,9 @@ package org.sonar.server.platform.ws;
 import org.junit.Test;
 import org.sonar.api.config.Settings;
 import org.sonar.api.server.ws.WsTester;
-import org.sonar.server.exceptions.BadRequestException;
+import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.platform.Platform;
 
-import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.Fail.fail;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -39,7 +38,7 @@ public class RestartHandlerTest {
     Settings settings = new Settings();
     settings.setProperty("sonar.dev", true);
     RestartHandler restartHandler = new RestartHandler(settings, platform);
-    PlatformWs ws = new PlatformWs(restartHandler);
+    SystemWs ws = new SystemWs(restartHandler);
 
     WsTester tester = new WsTester(ws);
     tester.newRequest("restart").execute();
@@ -52,14 +51,13 @@ public class RestartHandlerTest {
     Platform platform = mock(Platform.class);
     Settings settings = new Settings();
     RestartHandler restartHandler = new RestartHandler(settings, platform);
-    PlatformWs ws = new PlatformWs(restartHandler);
+    SystemWs ws = new SystemWs(restartHandler);
 
     WsTester tester = new WsTester(ws);
     try {
       tester.newRequest("restart").execute();
       fail();
-    } catch (BadRequestException e) {
-      assertThat(e).hasMessage("Available in development mode only (sonar.dev=true)");
+    } catch (ForbiddenException e) {
       verifyZeroInteractions(platform);
     }
   }
diff --git a/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemWsTest.java b/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemWsTest.java
new file mode 100644 (file)
index 0000000..9780060
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+package org.sonar.server.platform.ws;
+
+import org.junit.Test;
+import org.sonar.api.config.Settings;
+import org.sonar.api.server.ws.WebService;
+import org.sonar.server.platform.Platform;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+public class SystemWsTest {
+
+  @Test
+  public void define() throws Exception {
+    Platform platform = mock(Platform.class);
+    Settings settings = new Settings();
+    RestartHandler restartHandler = new RestartHandler(settings, platform);
+    SystemWs ws = new SystemWs(restartHandler);
+    WebService.Context context = new WebService.Context();
+
+    ws.define(context);
+
+    assertThat(context.controllers()).hasSize(1);
+    assertThat(context.controller("api/system")).isNotNull();
+    assertThat(context.controller("api/system").actions()).isNotEmpty();
+  }
+}
index db5d48620a407024423ce8ddc4111ce9d8d74d56..297925efaa2cc82cbde754569989bd51644f063c 100644 (file)
@@ -33,4 +33,10 @@ public interface SystemClient {
    * Synchronously start a database migration.
    */
   Migration migrate(long timeoutInSeconds, long rateInSeconds);
+
+  /**
+   * Restart server. Available only in development mode.
+   * @since 4.3
+   */
+  void restart();
 }
index a385ca3ce5d9d35135550d273ed68a94f2156527..7eacea238b4e03d07b74112ac608bfce1d8adc93 100644 (file)
@@ -24,7 +24,7 @@ import org.sonar.wsclient.internal.HttpRequestFactory;
 import org.sonar.wsclient.system.Migration;
 import org.sonar.wsclient.system.SystemClient;
 
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.Map;
 
 public class DefaultSystemClient implements SystemClient {
@@ -37,7 +37,7 @@ public class DefaultSystemClient implements SystemClient {
 
   @Override
   public Migration migrate() {
-    String json = requestFactory.post("/api/server/setup", new HashMap<String, Object>());
+    String json = requestFactory.post("/api/server/setup", Collections.<String, Object>emptyMap());
     return jsonToMigration(json);
   }
 
@@ -61,6 +61,11 @@ public class DefaultSystemClient implements SystemClient {
     return migration;
   }
 
+  @Override
+  public void restart() {
+    requestFactory.post("/api/system/restart", Collections.<String, Object>emptyMap());
+  }
+
   private void sleepQuietly(long rateInMs) {
     try {
       Thread.sleep(rateInMs);
index b2c05a2ef830bfe76291defd71a8633bd2f81b6c..7d550852fda9e69a2d667ac0589656d1a78578af 100644 (file)
@@ -25,11 +25,14 @@ import org.sonar.wsclient.MockHttpServerInterceptor;
 import org.sonar.wsclient.internal.HttpRequestFactory;
 import org.sonar.wsclient.system.Migration;
 
+import java.util.Collections;
+
 import static org.fest.assertions.Assertions.assertThat;
 import static org.fest.assertions.Fail.fail;
 import static org.mockito.Matchers.anyMap;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class DefaultSystemClientTest {
@@ -112,4 +115,12 @@ public class DefaultSystemClientTest {
       assertThat(e.getMessage()).isEqualTo("State is not set");
     }
   }
+
+  @Test
+  public void restart() {
+    HttpRequestFactory requestFactory = mock(HttpRequestFactory.class);
+    DefaultSystemClient client = new DefaultSystemClient(requestFactory);
+    client.restart();
+    verify(requestFactory).post("/api/system/restart", Collections.<String, Object>emptyMap());
+  }
 }