aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-09-26 14:16:11 +0200
committerJulien HENRY <julien.henry@sonarsource.com>2013-09-26 14:36:28 +0200
commit48f90cf6a79574c42c91594786d44fe2e887f9dd (patch)
tree1ab2157260fd7b5c26ef9a1808674ac86e73dda4 /sonar-server
parenta0c84b3c8e9a31d409a0803dc248a649e3ce13e9 (diff)
downloadsonarqube-48f90cf6a79574c42c91594786d44fe2e887f9dd.tar.gz
sonarqube-48f90cf6a79574c42c91594786d44fe2e887f9dd.zip
SONAR-4596 Don't install bundled plugins during upgrade
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/platform/DefaultServerFileSystem.java5
-rw-r--r--sonar-server/src/main/java/org/sonar/server/plugins/PluginDeployer.java41
-rw-r--r--sonar-server/src/test/java/org/sonar/server/plugins/PluginDeployerTest.java30
-rw-r--r--sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/extensions/plugins/foo-plugin.jarbin0 -> 645 bytes
-rw-r--r--sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployBundledPluginsOnFreshInstall/lib/bundled-plugins/bar-plugin.jarbin0 -> 714 bytes
-rw-r--r--sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/extensions/plugins/foo-plugin.jarbin1460 -> 645 bytes
-rw-r--r--sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/deployPlugin/lib/bundled-plugins/bar-plugin.jarbin0 -> 714 bytes
-rw-r--r--sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin1.jarbin1460 -> 645 bytes
-rw-r--r--sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/failIfTwoPluginsWithSameKey/extensions/plugins/foo-plugin2.jarbin1460 -> 645 bytes
-rw-r--r--sonar-server/src/test/resources/org/sonar/server/plugins/PluginDeployerTest/ignoreJarsWhichAreNotPlugins/extensions/plugins/not-a-plugin.jarbin960 -> 396 bytes
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
new 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
Binary files differ
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
new 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
Binary files differ
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
index 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
Binary files differ
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
new 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
Binary files differ
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
index 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
Binary files differ
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
index 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
Binary files differ
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
index 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
Binary files differ