diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-09-26 14:16:11 +0200 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-09-26 14:36:28 +0200 |
commit | 48f90cf6a79574c42c91594786d44fe2e887f9dd (patch) | |
tree | 1ab2157260fd7b5c26ef9a1808674ac86e73dda4 /sonar-server | |
parent | a0c84b3c8e9a31d409a0803dc248a649e3ce13e9 (diff) | |
download | sonarqube-48f90cf6a79574c42c91594786d44fe2e887f9dd.tar.gz sonarqube-48f90cf6a79574c42c91594786d44fe2e887f9dd.zip |
SONAR-4596 Don't install bundled plugins during upgrade
Diffstat (limited to 'sonar-server')
10 files changed, 59 insertions, 17 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java b/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java index 7d2aa83476a..4bdab364c0d 100644 --- a/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java +++ b/sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java @@ -145,6 +145,11 @@ public class DefaultServerFileSystem implements ServerFileSystem { return getFiles(corePluginsDir, "jar"); } + public List<File> getBundledPlugins() { + File corePluginsDir = new File(getHomeDir(), "lib/bundled-plugins"); + return getFiles(corePluginsDir, "jar"); + } + public List<File> getUserPlugins() { File pluginsDir = getUserPluginsDir(); return getFiles(pluginsDir, "jar"); diff --git a/sonar-server/src/main/java/org/sonar/server/plugins/PluginDeployer.java b/sonar-server/src/main/java/org/sonar/server/plugins/PluginDeployer.java index d183e9a0a8f..482ccc76997 100644 --- a/sonar-server/src/main/java/org/sonar/server/plugins/PluginDeployer.java +++ b/sonar-server/src/main/java/org/sonar/server/plugins/PluginDeployer.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import org.sonar.api.ServerComponent; import org.sonar.api.platform.PluginMetadata; import org.sonar.api.platform.Server; +import org.sonar.api.platform.ServerUpgradeStatus; import org.sonar.api.utils.TimeProfiler; import org.sonar.core.plugins.DefaultPluginMetadata; import org.sonar.core.plugins.PluginInstaller; @@ -50,13 +51,15 @@ public class PluginDeployer implements ServerComponent { private final DefaultServerFileSystem fileSystem; private final PluginInstaller installer; private final Map<String, PluginMetadata> pluginByKeys = Maps.newHashMap(); + private final ServerUpgradeStatus serverUpgradeStatus; - public PluginDeployer(Server server, DefaultServerFileSystem fileSystem) { - this(server, fileSystem, new PluginInstaller()); + public PluginDeployer(Server server, ServerUpgradeStatus serverUpgradeStatus, DefaultServerFileSystem fileSystem) { + this(server, serverUpgradeStatus, fileSystem, new PluginInstaller()); } - PluginDeployer(Server server, DefaultServerFileSystem fileSystem, PluginInstaller installer) { + PluginDeployer(Server server, ServerUpgradeStatus serverUpgradeStatus, DefaultServerFileSystem fileSystem, PluginInstaller installer) { this.server = server; + this.serverUpgradeStatus = serverUpgradeStatus; this.fileSystem = fileSystem; this.installer = installer; } @@ -67,6 +70,9 @@ public class PluginDeployer implements ServerComponent { deleteUninstalledPlugins(); loadUserPlugins(); + if (serverUpgradeStatus.isFreshInstall()) { + copyAndLoadBundledPlugins(); + } moveAndLoadDownloadedPlugins(); loadCorePlugins(); @@ -115,29 +121,34 @@ public class PluginDeployer implements ServerComponent { if (fileSystem.getDownloadedPluginsDir().exists()) { Collection<File> jars = FileUtils.listFiles(fileSystem.getDownloadedPluginsDir(), new String[] {"jar"}, false); for (File jar : jars) { - File movedJar = moveDownloadedFile(jar); - if (movedJar != null) { - registerPlugin(movedJar, false, true); - } + installJarPlugin(jar, true); } } } - private File moveDownloadedFile(File jar) { + private void copyAndLoadBundledPlugins() { + for (File plugin : fileSystem.getBundledPlugins()) { + installJarPlugin(plugin, false); + } + } + + private void installJarPlugin(File jar, boolean deleteSource) { File destDir = fileSystem.getUserPluginsDir(); File destFile = new File(destDir, jar.getName()); if (destFile.exists()) { // plugin with same filename already installed FileUtils.deleteQuietly(jar); - return null; } try { - FileUtils.moveFileToDirectory(jar, destDir, true); - return destFile; + if (deleteSource) { + FileUtils.moveFileToDirectory(jar, destDir, true); + } else { + FileUtils.copyFileToDirectory(jar, destDir, true); + } + registerPlugin(destFile, false, true); } catch (IOException e) { - LOG.error("Fail to move the downloaded file: " + jar.getAbsolutePath(), e); - return null; + LOG.error("Fail to move plugin: " + jar.getAbsolutePath() + " to " + destDir.getAbsolutePath(), e); } } @@ -199,8 +210,8 @@ public class PluginDeployer implements ServerComponent { LOG.info("Deploy plugin {}", Joiner.on(" / ").skipNulls().join(plugin.getName(), plugin.getVersion(), plugin.getImplementationBuild())); Preconditions.checkState(plugin.isCompatibleWith(server.getVersion()), - "Plugin %s needs a more recent version of SonarQube than %s. At least %s is expected", - plugin.getKey(), server.getVersion(), plugin.getSonarVersion()); + "Plugin %s needs a more recent version of SonarQube than %s. At least %s is expected", + plugin.getKey(), server.getVersion(), plugin.getSonarVersion()); try { File pluginDeployDir = new File(fileSystem.getDeployedPluginsDir(), plugin.getKey()); diff --git a/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java b/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java index 7d5ededcba4..9d6a23e7d96 100644 --- a/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java +++ b/sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java @@ -26,6 +26,7 @@ import org.junit.rules.ExpectedException; import org.junit.rules.TestName; import org.sonar.api.platform.PluginMetadata; import org.sonar.api.platform.Server; +import org.sonar.api.platform.ServerUpgradeStatus; import org.sonar.core.plugins.PluginInstaller; import org.sonar.server.platform.DefaultServerFileSystem; import org.sonar.test.TestUtils; @@ -48,6 +49,7 @@ public class PluginDeployerTest { private File deployDir; private PluginDeployer deployer; private Server server = mock(Server.class); + private ServerUpgradeStatus serverUpgradeStatus; @Before public void start() { @@ -56,15 +58,18 @@ public class PluginDeployerTest { deployDir = TestUtils.getTestTempDir(PluginDeployerTest.class, name.getMethodName() + "/deploy"); fileSystem = new DefaultServerFileSystem(null, homeDir, deployDir); extractor = new PluginInstaller(); - deployer = new PluginDeployer(server, fileSystem, extractor); + serverUpgradeStatus = mock(ServerUpgradeStatus.class); + deployer = new PluginDeployer(server, serverUpgradeStatus, fileSystem, extractor); } @Test public void deployPlugin() { + when(serverUpgradeStatus.isFreshInstall()).thenReturn(false); + deployer.start(); // check that the plugin is registered - assertThat(deployer.getMetadata()).hasSize(1); // no more checkstyle + assertThat(deployer.getMetadata()).hasSize(1); PluginMetadata plugin = deployer.getMetadata("foo"); assertThat(plugin.getName()).isEqualTo("Foo"); @@ -79,6 +84,27 @@ public class PluginDeployerTest { } @Test + public void deployBundledPluginsOnFreshInstall() { + when(serverUpgradeStatus.isFreshInstall()).thenReturn(true); + + deployer.start(); + + // check that the plugin is registered + assertThat(deployer.getMetadata()).hasSize(2); + + PluginMetadata plugin = deployer.getMetadata("bar"); + assertThat(plugin.getName()).isEqualTo("Bar"); + assertThat(plugin.getDeployedFiles()).hasSize(1); + assertThat(plugin.isCore()).isFalse(); + assertThat(plugin.isUseChildFirstClassLoader()).isFalse(); + + // check that the file is deployed + File deployedJar = new File(deployDir, "plugins/bar/bar-plugin.jar"); + assertThat(deployedJar).exists(); + assertThat(deployedJar).isFile(); + } + + @Test public void deployPluginExtensions() { deployer.start(); diff --git a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/extensions/plugins/foo-plugin.jar b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/extensions/plugins/foo-plugin.jar Binary files differnew file mode 100644 index 00000000000..22ced8fcb61 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/extensions/plugins/foo-plugin.jar diff --git a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/lib/bundled-plugins/bar-plugin.jar b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/lib/bundled-plugins/bar-plugin.jar Binary files differnew file mode 100644 index 00000000000..acf4fa40269 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/lib/bundled-plugins/bar-plugin.jar diff --git a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/extensions/plugins/foo-plugin.jar b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/extensions/plugins/foo-plugin.jar Binary files differindex 7bcf027151a..22ced8fcb61 100644 --- a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/extensions/plugins/foo-plugin.jar +++ b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/extensions/plugins/foo-plugin.jar diff --git a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/lib/bundled-plugins/bar-plugin.jar b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/lib/bundled-plugins/bar-plugin.jar Binary files differnew file mode 100644 index 00000000000..acf4fa40269 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/lib/bundled-plugins/bar-plugin.jar diff --git a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin1.jar b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin1.jar Binary files differindex 7bcf027151a..22ced8fcb61 100644 --- a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin1.jar +++ b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin1.jar diff --git a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin2.jar b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin2.jar Binary files differindex 7bcf027151a..22ced8fcb61 100644 --- a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin2.jar +++ b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin2.jar diff --git a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/ignoreJarsWhichAreNotPlugins/extensions/plugins/not-a-plugin.jar b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/ignoreJarsWhichAreNotPlugins/extensions/plugins/not-a-plugin.jar Binary files differindex f35e77146cc..11b72f4f8eb 100644 --- a/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/ignoreJarsWhichAreNotPlugins/extensions/plugins/not-a-plugin.jar +++ b/sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/ignoreJarsWhichAreNotPlugins/extensions/plugins/not-a-plugin.jar |