summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-02-21 13:53:59 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2013-02-21 13:54:35 +0100
commite2904df72ffc0ccd33062708f25349efc8eca5f8 (patch)
tree42dd8a51758c443ed4f35c6ec88ed646e28ffdb1
parent32fb07cb52f15337c1889c538c2e13f75c31d5f1 (diff)
downloadsonarqube-e2904df72ffc0ccd33062708f25349efc8eca5f8.tar.gz
sonarqube-e2904df72ffc0ccd33062708f25349efc8eca5f8.zip
Increase coverage by UTs.
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionInstaller.java24
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ScanTask.java20
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionInstallerTest.java68
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/scan/ScanTaskTest.java59
-rw-r--r--sonar-core/src/test/java/org/sonar/core/persistence/SemaphoreUpdaterTest.java5
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");
+ }
+
}