aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2016-04-14 09:39:13 +0200
committerSimon Brandhof <simon.brandhof@sonarsource.com>2016-04-25 15:24:03 +0200
commited81b6c7f2596a13068dbcddea71162cc69aaa8f (patch)
tree3e579a01b8e00059b40f976d0bf335babd7bd3cb /server
parent6187aa51a1e07a22242b32401c09877cff26a7c5 (diff)
downloadsonarqube-ed81b6c7f2596a13068dbcddea71162cc69aaa8f.tar.gz
sonarqube-ed81b6c7f2596a13068dbcddea71162cc69aaa8f.zip
SONAR-7549 SONAR-6171 verifies UTF8 charset and case-sensitive collation
Diffstat (limited to 'server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAfterMigration.java37
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAtStartup.java54
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/db/migrations/PlatformDatabaseMigration.java5
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationAsynchronousTest.java8
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationConcurrentAccessTest.java10
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationTest.java14
9 files changed, 117 insertions, 21 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAfterMigration.java b/server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAfterMigration.java
new file mode 100644
index 00000000000..6d8f25cff16
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAfterMigration.java
@@ -0,0 +1,37 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.db;
+
+import org.sonar.api.platform.ServerUpgradeStatus;
+import org.sonar.db.charset.DatabaseCharsetChecker;
+
+public class VerifyDatabaseCharsetAfterMigration extends VerifyDatabaseCharsetAtStartup {
+
+ public VerifyDatabaseCharsetAfterMigration(ServerUpgradeStatus upgradeStatus, DatabaseCharsetChecker charsetChecker) {
+ super(upgradeStatus, charsetChecker);
+ }
+
+ @Override
+ public void start() {
+ if (getUpgradeStatus().isFreshInstall() || getUpgradeStatus().isUpgraded()) {
+ check();
+ }
+ }
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAtStartup.java b/server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAtStartup.java
new file mode 100644
index 00000000000..aadd9ecad85
--- /dev/null
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/VerifyDatabaseCharsetAtStartup.java
@@ -0,0 +1,54 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.db;
+
+import org.picocontainer.Startable;
+import org.sonar.api.platform.ServerUpgradeStatus;
+import org.sonar.db.charset.DatabaseCharsetChecker;
+
+public class VerifyDatabaseCharsetAtStartup implements Startable {
+
+ private final ServerUpgradeStatus upgradeStatus;
+ private final DatabaseCharsetChecker charsetChecker;
+
+ public VerifyDatabaseCharsetAtStartup(ServerUpgradeStatus upgradeStatus, DatabaseCharsetChecker charsetChecker) {
+ this.upgradeStatus = upgradeStatus;
+ this.charsetChecker = charsetChecker;
+ }
+
+ @Override
+ public void start() {
+ check();
+ }
+
+ @Override
+ public void stop() {
+ // do nothing
+ }
+
+ protected void check() {
+ boolean enforceUtf8 = upgradeStatus.isFreshInstall();
+ charsetChecker.check(enforceUtf8);
+ }
+
+ protected ServerUpgradeStatus getUpgradeStatus() {
+ return upgradeStatus;
+ }
+}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/PlatformDatabaseMigration.java b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/PlatformDatabaseMigration.java
index a003031e6d6..d4420506492 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/db/migrations/PlatformDatabaseMigration.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/db/migrations/PlatformDatabaseMigration.java
@@ -63,7 +63,8 @@ public class PlatformDatabaseMigration implements DatabaseMigration {
@Nullable
private Throwable failureError;
- public PlatformDatabaseMigration(RubyBridge rubyBridge, PlatformDatabaseMigrationExecutorService executorService, Platform platform) {
+ public PlatformDatabaseMigration(RubyBridge rubyBridge,
+ PlatformDatabaseMigrationExecutorService executorService, Platform platform) {
this.rubyBridge = rubyBridge;
this.executorService = executorService;
this.platform = platform;
@@ -93,7 +94,7 @@ public class PlatformDatabaseMigration implements DatabaseMigration {
return;
}
- running.getAndSet(true);
+ running.set(true);
executorService.execute(new Runnable() {
@Override
public void run() {
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java
index f1ddb825890..6006d20c9f0 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java
@@ -24,6 +24,8 @@ import org.sonar.core.i18n.DefaultI18n;
import org.sonar.core.i18n.RuleI18nManager;
import org.sonar.core.platform.PluginClassloaderFactory;
import org.sonar.core.platform.PluginLoader;
+import org.sonar.db.charset.DatabaseCharsetChecker;
+import org.sonar.server.db.VerifyDatabaseCharsetAtStartup;
import org.sonar.server.db.migrations.DatabaseMigrator;
import org.sonar.server.db.migrations.PlatformDatabaseMigration;
import org.sonar.server.db.migrations.PlatformDatabaseMigrationExecutorServiceImpl;
@@ -46,6 +48,8 @@ public class PlatformLevel2 extends PlatformLevel {
add(
DefaultServerUpgradeStatus.class,
DatabaseMigrator.class,
+ DatabaseCharsetChecker.class,
+ VerifyDatabaseCharsetAtStartup.class,
// depends on Ruby
PlatformRubyBridge.class,
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java
index 6b614a41c9d..14c29a30859 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java
@@ -21,7 +21,7 @@ package org.sonar.server.platform.platformlevel;
import org.sonar.api.utils.UriReader;
import org.sonar.core.util.DefaultHttpDownloader;
-import org.sonar.db.CollationChecker;
+import org.sonar.server.db.VerifyDatabaseCharsetAfterMigration;
import org.sonar.server.platform.PersistentSettings;
import org.sonar.server.platform.ServerIdGenerator;
import org.sonar.server.startup.ServerMetadataPersister;
@@ -34,7 +34,7 @@ public class PlatformLevel3 extends PlatformLevel {
@Override
protected void configureLevel() {
add(
- CollationChecker.class,
+ VerifyDatabaseCharsetAfterMigration.class,
PersistentSettings.class,
ServerMetadataPersister.class,
DefaultHttpDownloader.class,
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java
index 218e9c6e8b4..1fb52f66f9e 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java
@@ -23,8 +23,8 @@ import org.sonar.server.platform.ws.DbMigrationStatusAction;
import org.sonar.server.platform.ws.MigrateDbAction;
import org.sonar.server.platform.ws.StatusAction;
import org.sonar.server.platform.ws.SystemWs;
-import org.sonar.server.ws.WebServicesWs;
import org.sonar.server.ws.WebServiceEngine;
+import org.sonar.server.ws.WebServicesWs;
public class PlatformLevelSafeMode extends PlatformLevel {
public PlatformLevelSafeMode(PlatformLevel parent) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationAsynchronousTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationAsynchronousTest.java
index 5cec2731897..4c5e407ac27 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationAsynchronousTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationAsynchronousTest.java
@@ -33,15 +33,15 @@ public class PlatformDatabaseMigrationAsynchronousTest {
* Implementation of execute wraps specified Runnable to add a delay of 200 ms before passing it
* to a SingleThread executor to execute asynchronously.
*/
- private PlatformDatabaseMigrationExecutorService executorService = new PlatformDatabaseMigrationExecutorServiceAdaptor() {
+ PlatformDatabaseMigrationExecutorService executorService = new PlatformDatabaseMigrationExecutorServiceAdaptor() {
@Override
public void execute(final Runnable command) {
taskSuppliedForAsyncProcess = true;
}
};
- private RubyBridge rubyBridge = mock(RubyBridge.class);
- private Platform platform = mock(Platform.class);
- private PlatformDatabaseMigration underTest = new PlatformDatabaseMigration(rubyBridge, executorService, platform);
+ RubyBridge rubyBridge = mock(RubyBridge.class);
+ Platform platform = mock(Platform.class);
+ PlatformDatabaseMigration underTest = new PlatformDatabaseMigration(rubyBridge, executorService, platform);
@Test
public void testName() throws Exception {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationConcurrentAccessTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationConcurrentAccessTest.java
index f524b6ac58c..d11dfffa2f7 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationConcurrentAccessTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationConcurrentAccessTest.java
@@ -61,7 +61,7 @@ public class PlatformDatabaseMigrationConcurrentAccessTest {
/**
* Implementation of RubyDatabaseMigration which trigger method increments a thread-safe counter and add a delay of 200ms
*/
- private RubyDatabaseMigration rubyDatabaseMigration = new RubyDatabaseMigration() {
+ RubyDatabaseMigration rubyDatabaseMigration = new RubyDatabaseMigration() {
@Override
public void trigger() {
triggerCount.incrementAndGet();
@@ -72,10 +72,10 @@ public class PlatformDatabaseMigrationConcurrentAccessTest {
}
}
};
- private RubyBridge rubyBridge = mock(RubyBridge.class);
- private Platform platform = mock(Platform.class);
- private RubyRailsRoutes railsRoutes = mock(RubyRailsRoutes.class);
- private PlatformDatabaseMigration underTest = new PlatformDatabaseMigration(rubyBridge, executorService, platform);
+ RubyBridge rubyBridge = mock(RubyBridge.class);
+ Platform platform = mock(Platform.class);
+ RubyRailsRoutes railsRoutes = mock(RubyRailsRoutes.class);
+ PlatformDatabaseMigration underTest = new PlatformDatabaseMigration(rubyBridge, executorService, platform);
@After
public void tearDown() {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationTest.java
index 969b27f4c6f..c4251d4b504 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/db/migrations/PlatformDatabaseMigrationTest.java
@@ -44,19 +44,19 @@ public class PlatformDatabaseMigrationTest {
/**
* Implementation of execute runs Runnable synchronously.
*/
- private PlatformDatabaseMigrationExecutorService executorService = new PlatformDatabaseMigrationExecutorServiceAdaptor() {
+ PlatformDatabaseMigrationExecutorService executorService = new PlatformDatabaseMigrationExecutorServiceAdaptor() {
@Override
public void execute(Runnable command) {
command.run();
}
};
- private RubyBridge rubyBridge = mock(RubyBridge.class);
- private RubyDatabaseMigration rubyDatabaseMigration = mock(RubyDatabaseMigration.class);
- private RubyRailsRoutes rubyRailsRoutes = mock(RubyRailsRoutes.class);
- private Platform platform = mock(Platform.class);
- private InOrder inOrder = inOrder(rubyDatabaseMigration, rubyBridge, rubyRailsRoutes, platform);
+ RubyBridge rubyBridge = mock(RubyBridge.class);
+ RubyDatabaseMigration rubyDatabaseMigration = mock(RubyDatabaseMigration.class);
+ RubyRailsRoutes rubyRailsRoutes = mock(RubyRailsRoutes.class);
+ Platform platform = mock(Platform.class);
+ InOrder inOrder = inOrder(rubyDatabaseMigration, rubyBridge, rubyRailsRoutes, platform);
- private PlatformDatabaseMigration underTest = new PlatformDatabaseMigration(rubyBridge, executorService, platform);
+ PlatformDatabaseMigration underTest = new PlatformDatabaseMigration(rubyBridge, executorService, platform);
@Test
public void status_is_NONE_when_component_is_created() {