diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2018-06-29 13:01:56 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2018-07-09 10:39:31 +0200 |
commit | 69714b41c96eb99271a21735f09ca1a17ff4eaef (patch) | |
tree | d109f5619d868164263f9b407120538fea443fd7 /server/sonar-ce | |
parent | b740a8f59662f43cfe6940bdd70d9a51bc65eea5 (diff) | |
download | sonarqube-69714b41c96eb99271a21735f09ca1a17ff4eaef.tar.gz sonarqube-69714b41c96eb99271a21735f09ca1a17ff4eaef.zip |
move some organization and platform shared classes to server-common
Diffstat (limited to 'server/sonar-ce')
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); + } +} |