]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6652 explicit error when DB is disconnected in WS response 582/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 14 Oct 2015 12:53:40 +0000 (14:53 +0200)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Thu, 15 Oct 2015 07:08:16 +0000 (09:08 +0200)
server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationJsonWriter.java
server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationStatusAction.java
server/sonar-server/src/main/java/org/sonar/server/platform/ws/MigrateDbAction.java
server/sonar-server/src/test/java/org/sonar/server/platform/ws/DbMigrationStatusActionTest.java
server/sonar-server/src/test/java/org/sonar/server/platform/ws/MigrateDbActionTest.java

index 0b0fe21bab7191b9e1e3438f8fb9e3114314d467..ce2669c5d307f571eea0980093eb821314e645b7 100644 (file)
@@ -37,6 +37,7 @@ public class DbMigrationJsonWriter {
   static final String STATUS_MIGRATION_SUCCEEDED = "MIGRATION_SUCCEEDED";
   static final String STATUS_MIGRATION_REQUIRED = "MIGRATION_REQUIRED";
 
+  static final String NO_CONNECTION_TO_DB = "Cannot connect to Database.";
   static final String UNSUPPORTED_DATABASE_MIGRATION_STATUS = "Unsupported DatabaseMigration status";
   static final String MESSAGE_NO_MIGRATION_ON_EMBEDDED_DATABASE = "Upgrade is not supported on embedded database.";
   static final String MESSAGE_MIGRATION_REQUIRED = "Database migration is required. DB migration can be started using WS /api/system/migrate_db.";
index 1fb2ecb86f2afa0a28f34fa3604a679cd53b18ec..31312f3558539c7941dbc81a4a58ef7de34e4541 100644 (file)
@@ -29,6 +29,8 @@ import org.sonar.db.Database;
 import org.sonar.db.version.DatabaseMigration;
 import org.sonar.db.version.DatabaseVersion;
 
+import static com.google.common.base.Preconditions.checkState;
+import static org.sonar.server.platform.ws.DbMigrationJsonWriter.NO_CONNECTION_TO_DB;
 import static org.sonar.server.platform.ws.DbMigrationJsonWriter.UNSUPPORTED_DATABASE_MIGRATION_STATUS;
 import static org.sonar.server.platform.ws.DbMigrationJsonWriter.statusDescription;
 import static org.sonar.server.platform.ws.DbMigrationJsonWriter.write;
@@ -64,6 +66,7 @@ public class DbMigrationStatusAction implements SystemWsAction {
   @Override
   public void handle(Request request, Response response) throws Exception {
     Integer currentVersion = databaseVersion.getVersion();
+    checkState(currentVersion != null, NO_CONNECTION_TO_DB);
 
     JsonWriter json = response.newJsonWriter();
     try {
index 80e82906290d01213bf615ad518537ee155d724f..d11b7666839a5d03c920dd0585a0ba325f6756b7 100644 (file)
@@ -28,6 +28,8 @@ import org.sonar.db.Database;
 import org.sonar.db.version.DatabaseMigration;
 import org.sonar.db.version.DatabaseVersion;
 
+import static com.google.common.base.Preconditions.checkState;
+import static org.sonar.server.platform.ws.DbMigrationJsonWriter.NO_CONNECTION_TO_DB;
 import static org.sonar.server.platform.ws.DbMigrationJsonWriter.UNSUPPORTED_DATABASE_MIGRATION_STATUS;
 import static org.sonar.server.platform.ws.DbMigrationJsonWriter.statusDescription;
 import static org.sonar.server.platform.ws.DbMigrationJsonWriter.write;
@@ -67,9 +69,7 @@ public class MigrateDbAction implements SystemWsAction {
   @Override
   public void handle(Request request, Response response) throws Exception {
     Integer currentVersion = databaseVersion.getVersion();
-    if (currentVersion == null) {
-      throw new IllegalStateException("Version can not be retrieved from Database. Database is either blank or corrupted");
-    }
+    checkState(currentVersion != null, NO_CONNECTION_TO_DB);
 
     JsonWriter json = response.newJsonWriter();
     try {
index e0d3c4322409bc1ccb9cf729231e66765e42472b..4dbe5e7a682cfadab0447b909df3890152c462a1 100644 (file)
@@ -25,7 +25,9 @@ import java.util.Arrays;
 import java.util.Date;
 import javax.annotation.Nullable;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.utils.DateUtils;
 import org.sonar.db.Database;
@@ -58,6 +60,8 @@ import static org.sonar.server.platform.ws.DbMigrationJsonWriter.STATUS_NO_MIGRA
 import static org.sonar.test.JsonAssert.assertJson;
 
 public class DbMigrationStatusActionTest {
+  @Rule
+  public ExpectedException expectedException = ExpectedException.none();
 
   private static final Date SOME_DATE = new Date();
   private static final String SOME_THROWABLE_MSG = "blablabla pop !";
@@ -91,6 +95,16 @@ public class DbMigrationStatusActionTest {
     assertJson(response.outputAsString()).isSimilarTo(getClass().getResource("example-migrate_db.json"));
   }
 
+  @Test
+  public void throws_ISE_when_databaseVersion_can_not_be_determined() throws Exception {
+    when(databaseVersion.getVersion()).thenReturn(null);
+
+    expectedException.expect(IllegalStateException.class);
+    expectedException.expectMessage("Cannot connect to Database.");
+
+    underTest.handle(request, response);
+  }
+
   @Test
   public void msg_is_operational_and_state_from_databasemigration_when_databaseversion_is_equal_to_currentversion() throws Exception {
     when(databaseVersion.getVersion()).thenReturn(CURRENT_VERSION);
index 3f022cb4428fed5e0733030950ff26febb3524e8..5baca53f48c827d2d99b55deff61cd1ac84d76b8 100644 (file)
@@ -24,7 +24,9 @@ import java.util.Arrays;
 import java.util.Date;
 import javax.annotation.Nullable;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.utils.DateUtils;
 import org.sonar.db.Database;
@@ -47,6 +49,8 @@ import static org.sonar.db.version.DatabaseMigration.Status.SUCCEEDED;
 import static org.sonar.test.JsonAssert.assertJson;
 
 public class MigrateDbActionTest {
+  @Rule
+  public ExpectedException expectedException = ExpectedException.none();
 
   private static final Date SOME_DATE = new Date();
   private static final String SOME_THROWABLE_MSG = "blablabla pop !";
@@ -80,10 +84,13 @@ public class MigrateDbActionTest {
     when(database.getDialect()).thenReturn(dialect);
   }
 
-  @Test(expected = IllegalStateException.class)
+  @Test
   public void ISE_is_thrown_when_version_can_not_be_retrieved_from_database() throws Exception {
     when(databaseVersion.getVersion()).thenReturn(null);
 
+    expectedException.expect(IllegalStateException.class);
+    expectedException.expectMessage("Cannot connect to Database.");
+
     underTest.handle(request, response);
   }