]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7899 Remove coupling of ServerPluginRepository on Server
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 28 Jul 2016 11:22:14 +0000 (13:22 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Fri, 29 Jul 2016 08:31:31 +0000 (10:31 +0200)
server/sonar-server/src/main/java/org/sonar/server/plugins/ServerPluginRepository.java
server/sonar-server/src/test/java/org/sonar/server/plugins/ServerPluginRepositoryTest.java

index 47e3bc584e02f816d6d8e103359d770257744b1d..211e39e94906d92ae7e9cd1b540050edeed8266a 100644 (file)
@@ -40,7 +40,7 @@ import javax.annotation.Nonnull;
 import org.apache.commons.io.FileUtils;
 import org.picocontainer.Startable;
 import org.sonar.api.Plugin;
-import org.sonar.api.platform.Server;
+import org.sonar.api.SonarRuntime;
 import org.sonar.api.platform.ServerUpgradeStatus;
 import org.sonar.api.utils.MessageException;
 import org.sonar.api.utils.log.Logger;
@@ -83,7 +83,7 @@ public class ServerPluginRepository implements PluginRepository, Startable {
   private static final Joiner SLASH_JOINER = Joiner.on(" / ").skipNulls();
   private static final String NOT_STARTED_YET = "not started yet";
 
-  private final Server server;
+  private final SonarRuntime runtime;
   private final ServerFileSystem fs;
   private final ServerUpgradeStatus upgradeStatus;
   private final PluginLoader loader;
@@ -94,9 +94,9 @@ public class ServerPluginRepository implements PluginRepository, Startable {
   private final Map<String, PluginInfo> pluginInfosByKeys = new HashMap<>();
   private final Map<String, Plugin> pluginInstancesByKeys = new HashMap<>();
 
-  public ServerPluginRepository(Server server, ServerUpgradeStatus upgradeStatus,
+  public ServerPluginRepository(SonarRuntime runtime, ServerUpgradeStatus upgradeStatus,
     ServerFileSystem fs, PluginLoader loader) {
-    this.server = server;
+    this.runtime = runtime;
     this.upgradeStatus = upgradeStatus;
     this.fs = fs;
     this.loader = loader;
@@ -231,7 +231,7 @@ public class ServerPluginRepository implements PluginRepository, Startable {
     do {
       removedKeys.clear();
       for (PluginInfo plugin : pluginInfosByKeys.values()) {
-        if (!isCompatible(plugin, server, pluginInfosByKeys)) {
+        if (!isCompatible(plugin, runtime, pluginInfosByKeys)) {
           removedKeys.add(plugin.getKey());
         }
       }
@@ -242,13 +242,13 @@ public class ServerPluginRepository implements PluginRepository, Startable {
   }
 
   @VisibleForTesting
-  static boolean isCompatible(PluginInfo plugin, Server server, Map<String, PluginInfo> allPluginsByKeys) {
+  static boolean isCompatible(PluginInfo plugin, SonarRuntime runtime, Map<String, PluginInfo> allPluginsByKeys) {
     if (Strings.isNullOrEmpty(plugin.getMainClass()) && Strings.isNullOrEmpty(plugin.getBasePlugin())) {
       LOG.warn("Plugin {} [{}] is ignored because entry point class is not defined", plugin.getName(), plugin.getKey());
       return false;
     }
 
-    if (!plugin.isCompatibleWith(server.getVersion())) {
+    if (!plugin.isCompatibleWith(runtime.getApiVersion().toString())) {
       throw MessageException.of(format(
         "Plugin %s [%s] requires at least SonarQube %s", plugin.getName(), plugin.getKey(), plugin.getMinimalSqVersion()));
     }
index 51bc9ebe563cf501adafc2cef5b3d1398320ec88..c33e359d0ae68021b11de1757bed4b9dd3eef9e7 100644 (file)
@@ -33,7 +33,7 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.rules.TemporaryFolder;
 import org.mockito.Mockito;
-import org.sonar.api.platform.Server;
+import org.sonar.api.SonarRuntime;
 import org.sonar.api.platform.ServerUpgradeStatus;
 import org.sonar.api.utils.MessageException;
 import org.sonar.api.utils.log.LogTester;
@@ -58,11 +58,11 @@ public class ServerPluginRepositoryTest {
   @Rule
   public LogTester logs = new LogTester();
 
-  Server server = mock(Server.class);
+  private SonarRuntime runtime = mock(SonarRuntime.class);
   ServerUpgradeStatus upgradeStatus = mock(ServerUpgradeStatus.class);
   ServerFileSystem fs = mock(ServerFileSystem.class, Mockito.RETURNS_DEEP_STUBS);
   PluginLoader pluginLoader = mock(PluginLoader.class);
-  ServerPluginRepository underTest = new ServerPluginRepository(server, upgradeStatus, fs, pluginLoader);
+  ServerPluginRepository underTest = new ServerPluginRepository(runtime, upgradeStatus, fs, pluginLoader);
 
   @Before
   public void setUp() throws IOException {
@@ -72,7 +72,7 @@ public class ServerPluginRepositoryTest {
     when(fs.getHomeDir()).thenReturn(temp.newFolder());
     when(fs.getInstalledPluginsDir()).thenReturn(temp.newFolder());
     when(fs.getTempDir()).thenReturn(temp.newFolder());
-    when(server.getVersion()).thenReturn("5.2");
+    when(runtime.getApiVersion()).thenReturn(org.sonar.api.utils.Version.parse("5.2"));
   }
 
   @After
@@ -213,7 +213,7 @@ public class ServerPluginRepositoryTest {
 
   @Test
   public void fail_if_plugin_does_not_support_sq_version() throws Exception {
-    when(server.getVersion()).thenReturn("1.0");
+    when(runtime.getApiVersion()).thenReturn(org.sonar.api.utils.Version.parse("1.0"));
     copyTestPluginTo("test-base-plugin", fs.getInstalledPluginsDir());
 
     try {
@@ -310,7 +310,7 @@ public class ServerPluginRepositoryTest {
   @Test
   public void plugin_is_incompatible_if_no_entry_point_class() {
     PluginInfo plugin = new PluginInfo("foo").setName("Foo");
-    assertThat(ServerPluginRepository.isCompatible(plugin, server, Collections.<String, PluginInfo>emptyMap())).isFalse();
+    assertThat(ServerPluginRepository.isCompatible(plugin, runtime, Collections.emptyMap())).isFalse();
     assertThat(logs.logs()).contains("Plugin Foo [foo] is ignored because entry point class is not defined");
   }
 
@@ -350,7 +350,7 @@ public class ServerPluginRepositoryTest {
     PluginInfo plugin = new PluginInfo("foo").setBasePlugin("base");
     Map<String, PluginInfo> plugins = ImmutableMap.of("base", basePlugin, "foo", plugin);
 
-    assertThat(ServerPluginRepository.isCompatible(plugin, server, plugins)).isTrue();
+    assertThat(ServerPluginRepository.isCompatible(plugin, runtime, plugins)).isTrue();
   }
 
   @Test