From cb433cccdd4f8cc822d948589726fc4c4122f20a Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Wed, 14 Oct 2015 14:53:40 +0200 Subject: [PATCH] SONAR-6652 explicit error when DB is disconnected in WS response --- .../server/platform/ws/DbMigrationJsonWriter.java | 1 + .../platform/ws/DbMigrationStatusAction.java | 3 +++ .../sonar/server/platform/ws/MigrateDbAction.java | 6 +++--- .../platform/ws/DbMigrationStatusActionTest.java | 14 ++++++++++++++ .../server/platform/ws/MigrateDbActionTest.java | 9 ++++++++- 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationJsonWriter.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationJsonWriter.java index 0b0fe21bab7..ce2669c5d30 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationJsonWriter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationJsonWriter.java @@ -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."; diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationStatusAction.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationStatusAction.java index 1fb2ecb86f2..31312f35585 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationStatusAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/DbMigrationStatusAction.java @@ -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 { diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/MigrateDbAction.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/MigrateDbAction.java index 80e82906290..d11b7666839 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/MigrateDbAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/MigrateDbAction.java @@ -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 { diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/DbMigrationStatusActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/DbMigrationStatusActionTest.java index e0d3c432240..4dbe5e7a682 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/DbMigrationStatusActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/DbMigrationStatusActionTest.java @@ -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); diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/MigrateDbActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/MigrateDbActionTest.java index 3f022cb4428..5baca53f48c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/MigrateDbActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/MigrateDbActionTest.java @@ -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); } -- 2.39.5