diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-02-21 13:53:59 +0100 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-02-21 13:54:35 +0100 |
commit | e2904df72ffc0ccd33062708f25349efc8eca5f8 (patch) | |
tree | 42dd8a51758c443ed4f35c6ec88ed646e28ffdb1 | |
parent | 32fb07cb52f15337c1889c538c2e13f75c31d5f1 (diff) | |
download | sonarqube-e2904df72ffc0ccd33062708f25349efc8eca5f8.tar.gz sonarqube-e2904df72ffc0ccd33062708f25349efc8eca5f8.zip |
Increase coverage by UTs.
5 files changed, 154 insertions, 22 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java index 6d4de85171a..211128bde2f 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java @@ -119,12 +119,7 @@ public class ExtensionInstaller implements BatchComponent { if (ExtensionUtils.isTaskExtension(extension) && (projectPresent || !ExtensionUtils.requiresProject(extension)) && ExtensionUtils.supportsEnvironment(extension, environment)) { - if (plugin != null) { - LOG.debug("Installing task extension {} from plugin {}", extension.toString(), plugin.getKey()); - } - else { - LOG.debug("Installing task extension {}", extension.toString()); - } + logInstallExtension("task", plugin, extension); container.addExtension(plugin, extension); installed = true; } else { @@ -175,12 +170,7 @@ public class ExtensionInstaller implements BatchComponent { (!dryRun || ExtensionUtils.supportsDryRun(extension)) && ExtensionUtils.isInstantiationStrategy(extension, instantiationStrategy) && !isMavenExtensionOnEmulatedMavenProject(extension, instantiationStrategy, container)) { - if (plugin != null) { - LOG.debug("Installing batch extension {} from plugin {}", extension.toString(), plugin.getKey()); - } - else { - LOG.debug("Installing batch extension {}", extension.toString()); - } + logInstallExtension("batch", plugin, extension); container.addExtension(plugin, extension); installed = true; } else { @@ -202,4 +192,14 @@ public class ExtensionInstaller implements BatchComponent { } return false; } + + private void logInstallExtension(String extensionType, PluginMetadata plugin, Object extension) { + if (plugin != null) { + LOG.debug("Installing {} extension {} from plugin {}", new String[] {extensionType, extension.toString(), plugin.getKey()}); + } + else { + LOG.debug("Installing {} extension {}", extensionType, extension.toString()); + } + } + } diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ScanTask.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ScanTask.java index 78c3a392c80..f007e92749d 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/ScanTask.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ScanTask.java @@ -19,6 +19,7 @@ */ package org.sonar.batch.scan; +import com.google.common.annotations.VisibleForTesting; import org.sonar.api.platform.ComponentContainer; import org.sonar.api.resources.Project; import org.sonar.api.task.Task; @@ -31,10 +32,10 @@ public class ScanTask implements Task { public static final String COMMAND = "inspect"; public static final TaskDefinition DEFINITION = TaskDefinition.create() - .setDescription("Scan project and upload report to server") - .setName("Project Scan") - .setCommand(COMMAND) - .setTask(ScanTask.class); + .setDescription("Scan project and upload report to server") + .setName("Project Scan") + .setCommand(COMMAND) + .setTask(ScanTask.class); private final ComponentContainer container; private final ProjectTree projectTree; @@ -45,13 +46,18 @@ public class ScanTask implements Task { } public void execute() { - scan(projectTree.getRootProject()); + scanRecursively(projectTree.getRootProject()); } - private void scan(Project project) { + private void scanRecursively(Project project) { for (Project subProject : project.getModules()) { - scan(subProject); + scanRecursively(subProject); } + scan(project); + } + + @VisibleForTesting + void scan(Project project) { ScanContainer projectModule = new ScanContainer(project); try { ComponentContainer childContainer = container.createChild(); diff --git a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java index deba92ae7fd..ce31e79b46e 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java @@ -32,7 +32,10 @@ import org.sonar.api.config.Settings; import org.sonar.api.platform.ComponentContainer; import org.sonar.api.platform.PluginMetadata; import org.sonar.api.resources.Project; +import org.sonar.api.task.TaskDefinition; +import org.sonar.api.task.TaskExtension; import org.sonar.batch.bootstrapper.EnvironmentInformation; +import org.sonar.batch.tasks.RequiresProject; import java.util.Arrays; import java.util.List; @@ -46,12 +49,12 @@ public class ExtensionInstallerTest { private static final PluginMetadata METADATA = mock(PluginMetadata.class); - private static Map<PluginMetadata, Plugin> newPlugin(final Class... classes) { + private static Map<PluginMetadata, Plugin> newPlugin(final Object... extensions) { Map<PluginMetadata, Plugin> result = Maps.newHashMap(); result.put(METADATA, new SonarPlugin() { - public List<Class> getExtensions() { - return Arrays.asList(classes); + public List<?> getExtensions() { + return Arrays.asList(extensions); } } ); @@ -87,6 +90,46 @@ public class ExtensionInstallerTest { } @Test + public void shouldInstallTaskExtensions() { + BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class); + when(pluginRepository.getPluginsByMetadata()).thenReturn(newPlugin(SampleProjectTask.class, SampleTask.class, TaskProvider.class)); + ComponentContainer container = new ComponentContainer(); + ExtensionInstaller installer = new ExtensionInstaller(pluginRepository, new EnvironmentInformation("ant", "1.7"), new Settings()); + + installer.installTaskExtensions(container, true); + + assertThat(container.getComponentByType(SampleProjectTask.class)).isNotNull(); + assertThat(container.getComponentByType(SampleTask.class)).isNotNull(); + assertThat(container.getComponentByType(AnotherTask.class)).isNotNull(); + } + + @Test + public void shouldNotInstallProjectTaskExtensionsWhenNoProject() { + BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class); + when(pluginRepository.getPluginsByMetadata()).thenReturn(newPlugin(SampleProjectTask.class, SampleTask.class)); + ComponentContainer container = new ComponentContainer(); + ExtensionInstaller installer = new ExtensionInstaller(pluginRepository, new EnvironmentInformation("ant", "1.7"), new Settings()); + + installer.installTaskExtensions(container, false); + + assertThat(container.getComponentByType(SampleProjectTask.class)).isNull(); + assertThat(container.getComponentByType(SampleTask.class)).isNotNull(); + } + + @Test + public void shouldInstallTaskDefinitions() { + TaskDefinition definition = TaskDefinition.create(); + BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class); + when(pluginRepository.getPluginsByMetadata()).thenReturn(newPlugin(definition)); + ComponentContainer container = new ComponentContainer(); + ExtensionInstaller installer = new ExtensionInstaller(pluginRepository, new EnvironmentInformation("ant", "1.7"), new Settings()); + + installer.installTaskDefinitionExtensions(container); + + assertThat(container.getComponentsByType(TaskDefinition.class)).containsExactly(definition); + } + + @Test public void shouldNotInstallPluginsOnNonSupportedEnvironment() { BatchPluginRepository pluginRepository = mock(BatchPluginRepository.class); when(pluginRepository.getPluginsByMetadata()).thenReturn(newPlugin(MavenService.class, BuildToolService.class)); @@ -155,4 +198,23 @@ public class ExtensionInstallerTest { } + @RequiresProject + public static class SampleProjectTask implements TaskExtension { + + } + + public static class SampleTask implements TaskExtension { + } + + public static class AnotherTask implements TaskExtension { + } + + public static class TaskProvider extends ExtensionProvider implements TaskExtension { + + @Override + public Object provide() { + return Arrays.<Object> asList(AnotherTask.class); + } + } + } diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/ScanTaskTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/ScanTaskTest.java new file mode 100644 index 00000000000..5cbbfe780c7 --- /dev/null +++ b/sonar-batch/src/test/java/org/sonar/batch/scan/ScanTaskTest.java @@ -0,0 +1,59 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2008-2012 SonarSource + * mailto:contact AT sonarsource DOT com + * + * Sonar 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. + * + * Sonar 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 Sonar; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ +package org.sonar.batch.scan; + +import org.junit.Test; +import org.mockito.InOrder; +import org.sonar.api.platform.ComponentContainer; +import org.sonar.api.resources.Project; +import org.sonar.batch.ProjectTree; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +public class ScanTaskTest { + + @Test + public void should_scan_each_module() { + + final Project project = new Project("parent"); + final ProjectTree projectTree = mock(ProjectTree.class); + Project module1 = new Project("module1"); + module1.setParent(project); + Project module2 = new Project("module2"); + module2.setParent(project); + + when(projectTree.getRootProject()).thenReturn(project); + ScanTask scanTask = new ScanTask(projectTree, mock(ComponentContainer.class)); + ScanTask spy = spy(scanTask); + doNothing().when(spy).scan(any(Project.class)); + spy.execute(); + + InOrder inOrder = inOrder(spy); + + inOrder.verify(spy).scan(module1); + inOrder.verify(spy).scan(module2); + inOrder.verify(spy).scan(project); + } +} diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/SemaphoreUpdaterTest.java b/sonar-core/src/test/java/org/sonar/core/persistence/SemaphoreUpdaterTest.java index 3ef3c018328..ebc6c952b8d 100644 --- a/sonar-core/src/test/java/org/sonar/core/persistence/SemaphoreUpdaterTest.java +++ b/sonar-core/src/test/java/org/sonar/core/persistence/SemaphoreUpdaterTest.java @@ -65,4 +65,9 @@ public class SemaphoreUpdaterTest extends AbstractDaoTestCase { verify(dao, never()).update(semaphore); } + @Test + public void shouldNotFailWhenCancelNotExistingSemaphore() throws Exception { + updater.stopUpdate("foo"); + } + } |