aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-ce
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2018-06-29 13:01:56 +0200
committersonartech <sonartech@sonarsource.com>2018-07-09 10:39:31 +0200
commit69714b41c96eb99271a21735f09ca1a17ff4eaef (patch)
treed109f5619d868164263f9b407120538fea443fd7 /server/sonar-ce
parentb740a8f59662f43cfe6940bdd70d9a51bc65eea5 (diff)
downloadsonarqube-69714b41c96eb99271a21735f09ca1a17ff4eaef.tar.gz
sonarqube-69714b41c96eb99271a21735f09ca1a17ff4eaef.zip
move some organization and platform shared classes to server-common
Diffstat (limited to 'server/sonar-ce')
-rw-r--r--server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java4
-rw-r--r--server/sonar-ce/src/main/java/org/sonar/ce/platform/DatabaseCompatibility.java47
-rw-r--r--server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java1
-rw-r--r--server/sonar-ce/src/test/java/org/sonar/ce/platform/DatabaseCompatibilityTest.java93
4 files changed, 143 insertions, 2 deletions
diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java
index 9cb493f261c..5797aa2f168 100644
--- a/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java
+++ b/server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java
@@ -54,6 +54,7 @@ import org.sonar.ce.db.ReadOnlyPropertiesDao;
import org.sonar.ce.logging.CeProcessLogging;
import org.sonar.ce.platform.CECoreExtensionsInstaller;
import org.sonar.ce.platform.ComputeEngineExtensionInstaller;
+import org.sonar.ce.platform.DatabaseCompatibility;
import org.sonar.ce.queue.CeQueueCleaner;
import org.sonar.ce.queue.PurgeCeActivities;
import org.sonar.ce.task.projectanalysis.ProjectAnalysisTaskModule;
@@ -128,7 +129,6 @@ import org.sonar.server.permission.PermissionUpdater;
import org.sonar.server.permission.UserPermissionChanger;
import org.sonar.server.permission.index.PermissionIndexer;
import org.sonar.server.permission.ws.template.DefaultTemplatesResolverImpl;
-import org.sonar.server.platform.DatabaseServerCompatibility;
import org.sonar.server.platform.DefaultServerUpgradeStatus;
import org.sonar.server.platform.OfficialDistribution;
import org.sonar.server.platform.ServerFileSystemImpl;
@@ -330,7 +330,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer {
container.add(
MigrationConfigurationModule.class,
DatabaseVersion.class,
- DatabaseServerCompatibility.class,
+ DatabaseCompatibility.class,
DatabaseSettingLoader.class,
DatabaseSettingsEnabler.class,
diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/platform/DatabaseCompatibility.java b/server/sonar-ce/src/main/java/org/sonar/ce/platform/DatabaseCompatibility.java
new file mode 100644
index 00000000000..97e21d860c4
--- /dev/null
+++ b/server/sonar-ce/src/main/java/org/sonar/ce/platform/DatabaseCompatibility.java
@@ -0,0 +1,47 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info 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.ce.platform;
+
+import org.picocontainer.Startable;
+import org.sonar.server.platform.db.migration.version.DatabaseVersion;
+
+import static com.google.common.base.Preconditions.checkState;
+import static org.sonar.server.platform.db.migration.version.DatabaseVersion.Status.FRESH_INSTALL;
+import static org.sonar.server.platform.db.migration.version.DatabaseVersion.Status.UP_TO_DATE;
+
+public class DatabaseCompatibility implements Startable {
+
+ private final DatabaseVersion version;
+
+ public DatabaseCompatibility(DatabaseVersion version) {
+ this.version = version;
+ }
+
+ @Override
+ public void start() {
+ DatabaseVersion.Status status = version.getStatus();
+ checkState(status == UP_TO_DATE || status == FRESH_INSTALL, "Compute Engine can't start unless Database is up to date");
+ }
+
+ @Override
+ public void stop() {
+ // do nothing
+ }
+}
diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java
index d78e240bb0c..29d73c4a7eb 100644
--- a/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java
+++ b/server/sonar-ce/src/test/java/org/sonar/ce/container/ComputeEngineContainerImplTest.java
@@ -64,6 +64,7 @@ public class ComputeEngineContainerImplTest {
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
@Rule
+
public DbTester db = DbTester.create(System2.INSTANCE);
private ComputeEngineContainerImpl underTest;
diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/platform/DatabaseCompatibilityTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/platform/DatabaseCompatibilityTest.java
new file mode 100644
index 00000000000..680f3789ce2
--- /dev/null
+++ b/server/sonar-ce/src/test/java/org/sonar/ce/platform/DatabaseCompatibilityTest.java
@@ -0,0 +1,93 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info 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.ce.platform;
+
+import com.tngtech.java.junit.dataprovider.DataProvider;
+import com.tngtech.java.junit.dataprovider.DataProviderRunner;
+import com.tngtech.java.junit.dataprovider.UseDataProvider;
+import java.util.Arrays;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.sonar.server.platform.db.migration.version.DatabaseVersion;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+import static org.sonar.server.platform.db.migration.version.DatabaseVersion.Status.FRESH_INSTALL;
+import static org.sonar.server.platform.db.migration.version.DatabaseVersion.Status.UP_TO_DATE;
+
+@RunWith(DataProviderRunner.class)
+public class DatabaseCompatibilityTest {
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ private DatabaseVersion databaseVersion = mock(DatabaseVersion.class);
+ private DatabaseCompatibility underTest = new DatabaseCompatibility(databaseVersion);
+
+ @Test
+ @UseDataProvider("anyStatusButUpToDateOrFreshInstall")
+ public void start_throws_ISE_if_status_is_not_UP_TO_DATE_nor_FRESH_INSTALL(DatabaseVersion.Status status) {
+ when(databaseVersion.getStatus()).thenReturn(status);
+
+ expectedException.expect(IllegalStateException.class);
+ expectedException.expectMessage("Compute Engine can't start unless Database is up to date");
+
+ underTest.start();
+ }
+
+ @DataProvider
+ public static Object[][] anyStatusButUpToDateOrFreshInstall() {
+ return Arrays.stream(DatabaseVersion.Status.values())
+ .filter(t -> t != UP_TO_DATE && t != FRESH_INSTALL)
+ .map(t -> new Object[] {t})
+ .toArray(Object[][]::new);
+ }
+
+ @Test
+ public void start_has_no_effect_if_status_is_UP_TO_DATE() {
+ when(databaseVersion.getStatus()).thenReturn(UP_TO_DATE);
+
+ underTest.start();
+
+ verify(databaseVersion).getStatus();
+ verifyNoMoreInteractions(databaseVersion);
+ }
+
+ @Test
+ public void start_has_no_effect_if_status_is_FRESH_INSTALL() {
+ when(databaseVersion.getStatus()).thenReturn(DatabaseVersion.Status.FRESH_INSTALL);
+
+ underTest.start();
+
+ verify(databaseVersion).getStatus();
+ verifyNoMoreInteractions(databaseVersion);
+ }
+
+ @Test
+ public void stop_has_no_effect() {
+ underTest.stop();
+
+ verifyZeroInteractions(databaseVersion);
+ }
+}