import com.google.common.base.Throwables;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
private LoggingConfiguration loggingConfig;
private List<Object> components;
- private Map<String, String> scannerProperties = new HashMap<>();
- private GlobalContainer bootstrapContainer;
+ private Map<String, String> globalProperties = new HashMap<>();
private Batch(Builder builder) {
components = new ArrayList<>();
if (builder.environment != null) {
components.add(builder.environment);
}
- if (builder.scannerProperties != null) {
- scannerProperties.putAll(builder.scannerProperties);
+ if (builder.globalProperties != null) {
+ globalProperties.putAll(builder.globalProperties);
}
if (builder.isEnableLoggingConfiguration()) {
- loggingConfig = new LoggingConfiguration(builder.environment).setProperties(scannerProperties);
+ loggingConfig = new LoggingConfiguration(builder.environment).setProperties(globalProperties);
if (builder.logOutput != null) {
loggingConfig.setLogOutput(builder.logOutput);
}
public synchronized Batch execute() {
+ return doExecute(this.globalProperties, this.components);
+ }
+
+ public synchronized Batch doExecute(Map<String, String> scannerProperties, List<Object> components) {
configureLogging();
- doStart();
try {
- doExecute();
- } finally {
- doStop();
+ GlobalContainer.create(scannerProperties, components).execute();
+ } catch (RuntimeException e) {
+ throw handleException(e);
}
return this;
}
return this;
}
- private Batch doStart() {
- try {
- bootstrapContainer = GlobalContainer.create(scannerProperties, components);
- bootstrapContainer.startComponents();
- } catch (RuntimeException e) {
- throw handleException(e);
- }
-
- return this;
- }
-
/**
* @since 4.4
* @deprecated since 6.6 use {@link #execute()}
*/
@Deprecated
public Batch executeTask(Map<String, String> analysisProperties, Object... components) {
- return execute();
- }
-
- private Batch doExecute(Object... components) {
- try {
- bootstrapContainer.executeTask(scannerProperties, components);
- } catch (RuntimeException e) {
- throw handleException(e);
- }
- return this;
+ Map<String, String> mergedProps = new HashMap<>(this.globalProperties);
+ mergedProps.putAll(analysisProperties);
+ List<Object> mergedComponents = new ArrayList<>(this.components);
+ mergedComponents.addAll(Arrays.asList(components));
+ return doExecute(mergedProps, mergedComponents);
}
private RuntimeException handleException(RuntimeException t) {
public synchronized void stop() {
}
- private void doStop() {
- try {
- bootstrapContainer.stopComponents();
- } catch (RuntimeException e) {
- throw handleException(e);
- }
- }
-
private void configureLogging() {
if (loggingConfig != null) {
- loggingConfig.setProperties(scannerProperties);
+ loggingConfig.setProperties(globalProperties);
LoggingConfigurator.apply(loggingConfig);
}
}
}
public static final class Builder {
- private Map<String, String> scannerProperties;
+ private Map<String, String> globalProperties;
private EnvironmentInformation environment;
private List<Object> components = new ArrayList<>();
private boolean enableLoggingConfiguration = true;
return this;
}
- public Builder setScannerProperties(Map<String, String> scannerProperties) {
- this.scannerProperties = scannerProperties;
+ public Builder setGlobalProperties(Map<String, String> globalProperties) {
+ this.globalProperties = globalProperties;
return this;
}
/**
- * @deprecated since 6.6 use {@link #setScannerProperties(Map)}
+ * @deprecated since 6.6 use {@link #setGlobalProperties(Map)}
*/
@Deprecated
public Builder setBootstrapProperties(Map<String, String> bootstrapProperties) {
- this.scannerProperties = bootstrapProperties;
+ this.globalProperties = bootstrapProperties;
return this;
}
import org.sonar.scanner.scm.ScmConfiguration;
import org.sonar.scanner.scm.ScmPublisher;
import org.sonar.scanner.source.ZeroCoverageSensor;
-import org.sonar.scanner.task.ListTask;
-import org.sonar.scanner.task.ScanTask;
-import org.sonar.scanner.task.Tasks;
-import org.sonar.scanner.task.ViewsTask;
public class BatchComponents {
private BatchComponents() {
public static Collection<Object> all(GlobalAnalysisMode analysisMode) {
List<Object> components = Lists.newArrayList(
- DefaultResourceTypes.get(),
-
- // Tasks
- Tasks.class,
- ListTask.DEFINITION,
- ListTask.class,
- ScanTask.DEFINITION,
- ScanTask.class,
- ViewsTask.DEFINITION,
- ViewsTask.class);
+ DefaultResourceTypes.get());
components.addAll(CorePropertyDefinitions.all());
if (!analysisMode.isIssues()) {
// SCM
import java.time.Clock;
import java.util.List;
import java.util.Map;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.CoreProperties;
import org.sonar.api.Plugin;
import org.sonar.api.SonarQubeSide;
import org.sonar.api.SonarQubeVersion;
import org.sonar.api.internal.ApiVersion;
import org.sonar.api.internal.SonarRuntimeImpl;
+import org.sonar.api.utils.MessageException;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.UriReader;
import org.sonar.api.utils.Version;
import org.sonar.scanner.repository.MetricsRepositoryProvider;
import org.sonar.scanner.repository.settings.DefaultSettingsLoader;
import org.sonar.scanner.repository.settings.SettingsLoader;
+import org.sonar.scanner.scan.ProjectScanContainer;
import org.sonar.scanner.storage.StoragesManager;
-import org.sonar.scanner.task.TaskContainer;
public class GlobalContainer extends ComponentContainer {
private static final Logger LOG = Loggers.get(GlobalContainer.class);
protected void doAfterStart() {
installPlugins();
loadCoreExtensions();
+
+ long startTime = System.currentTimeMillis();
+ String taskKey = StringUtils.defaultIfEmpty(scannerProperties.get(CoreProperties.TASK), CoreProperties.SCAN_TASK);
+ if (taskKey.equals("views")) {
+ throw MessageException.of("The task 'views' was removed with SonarQube 7.1. " +
+ "You can safely remove this call since portfolios and applications are automatically re-calculated.");
+ } else if (!taskKey.equals(CoreProperties.SCAN_TASK)) {
+ throw MessageException.of("Tasks support was removed in SonarQube 7.6.");
+ }
+ new ProjectScanContainer(this).execute();
+
+ LOG.info("Analysis total time: {}", formatTime(System.currentTimeMillis() - startTime));
}
private void installPlugins() {
loader.load();
}
- public void executeTask(Map<String, String> taskProperties, Object... components) {
- long startTime = System.currentTimeMillis();
- new TaskContainer(this, taskProperties, components).execute();
-
- LOG.info("Task total time: {}", formatTime(System.currentTimeMillis() - startTime));
- }
-
static String formatTime(long time) {
long h = time / (60 * 60 * 1000);
long m = (time - h * 60 * 60 * 1000) / (60 * 1000);
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import org.sonar.api.task.Task;
-import org.sonar.api.task.TaskDefinition;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-
-public class ListTask implements Task {
-
- private static final Logger LOG = Loggers.get(ListTask.class);
-
- public static final String KEY = "list";
-
- public static final TaskDefinition DEFINITION = TaskDefinition.builder()
- .key(KEY)
- .description("List available tasks")
- .taskClass(ListTask.class)
- .build();
-
- private final Tasks tasks;
-
- public ListTask(Tasks tasks) {
- this.tasks = tasks;
- }
-
- @Override
- public void execute() {
- StringBuilder sb = new StringBuilder();
- sb.append("\nAvailable tasks:\n");
- for (TaskDefinition def : tasks.definitions()) {
- sb.append(" - " + def.key() + ": " + def.description() + "\n");
- }
- sb.append("\n");
- LOG.info(sb.toString());
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import org.sonar.api.CoreProperties;
-import org.sonar.api.task.Task;
-import org.sonar.api.task.TaskDefinition;
-import org.sonar.core.platform.ComponentContainer;
-import org.sonar.scanner.scan.ProjectScanContainer;
-
-public class ScanTask implements Task {
- public static final TaskDefinition DEFINITION = TaskDefinition.builder()
- .description("Scan project")
- .key(CoreProperties.SCAN_TASK)
- .taskClass(ScanTask.class)
- .build();
-
- private final ComponentContainer taskContainer;
-
- public ScanTask(TaskContainer taskContainer) {
- this.taskContainer = taskContainer;
- }
-
- @Override
- public void execute() {
- new ProjectScanContainer(taskContainer).execute();
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import java.util.Map;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.task.Task;
-import org.sonar.api.task.TaskDefinition;
-import org.sonar.api.utils.MessageException;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-import org.sonar.core.extension.CoreExtensionsInstaller;
-import org.sonar.core.platform.ComponentContainer;
-import org.sonar.scanner.bootstrap.ExtensionInstaller;
-
-import static org.sonar.api.batch.InstantiationStrategy.PER_TASK;
-import static org.sonar.core.extension.CoreExtensionsInstaller.noExtensionFilter;
-import static org.sonar.scanner.bootstrap.ExtensionUtils.isDeprecatedScannerSide;
-import static org.sonar.scanner.bootstrap.ExtensionUtils.isInstantiationStrategy;
-
-public class TaskContainer extends ComponentContainer {
-
- private static final Logger LOG = Loggers.get(TaskContainer.class);
-
- private final Map<String, String> taskProperties;
- private final Object[] components;
-
- public TaskContainer(ComponentContainer parent, Map<String, String> taskProperties, Object... components) {
- super(parent);
- this.taskProperties = taskProperties;
- this.components = components;
- }
-
- @Override
- protected void doBeforeStart() {
- addTaskExtensions();
- for (Object component : components) {
- add(component);
- }
- }
-
- private void addTaskExtensions() {
- getComponentByType(CoreExtensionsInstaller.class)
- .install(this, noExtensionFilter(), t -> isInstantiationStrategy(t, PER_TASK));
- getComponentByType(ExtensionInstaller.class)
- .install(this, extension -> isDeprecatedScannerSide(extension) && isInstantiationStrategy(extension, PER_TASK));
- }
-
- @Override
- public void doAfterStart() {
- // default value is declared in CorePlugin
- String taskKey = StringUtils.defaultIfEmpty(taskProperties.get(CoreProperties.TASK), CoreProperties.SCAN_TASK);
- if (!taskKey.equals(CoreProperties.SCAN_TASK)) {
- LOG.warn("Scanner tasks are deprecated");
- }
- // Release memory
- taskProperties.clear();
-
- TaskDefinition def = getComponentByType(Tasks.class).definition(taskKey);
- if (def == null) {
- throw MessageException.of("Task '" + taskKey + "' does not exist. Please use '" + ListTask.KEY + "' task to see all available tasks.");
- }
- Task task = getComponentByType(def.taskClass());
- if (task != null) {
- task.execute();
- } else {
- throw new IllegalStateException("Task " + taskKey + " is badly defined");
- }
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import com.google.common.collect.ImmutableSortedMap;
-import com.google.common.collect.Maps;
-import java.util.Collection;
-import java.util.Map;
-import java.util.SortedMap;
-import org.sonar.api.batch.InstantiationStrategy;
-import org.sonar.api.batch.ScannerSide;
-import org.sonar.api.task.Task;
-import org.sonar.api.task.TaskDefinition;
-
-@ScannerSide
-@InstantiationStrategy(InstantiationStrategy.PER_TASK)
-public class Tasks {
-
- private final SortedMap<String, TaskDefinition> byKey;
-
- public Tasks(TaskDefinition[] definitions) {
- SortedMap<String, TaskDefinition> map = Maps.newTreeMap();
- for (TaskDefinition definition : definitions) {
- if (map.containsKey(definition.key())) {
- throw new IllegalStateException("Task '" + definition.key() + "' is declared twice");
- }
- map.put(definition.key(), definition);
- }
- this.byKey = ImmutableSortedMap.copyOf(map);
- }
-
- public TaskDefinition definition(String taskKey) {
- return byKey.get(taskKey);
- }
-
- public Collection<TaskDefinition> definitions() {
- return byKey.values();
- }
-
- /**
- * Perform validation of task definitions
- */
- public void start() {
- checkDuplicatedClasses();
- }
-
- private void checkDuplicatedClasses() {
- Map<Class<? extends Task>, TaskDefinition> byClass = Maps.newHashMap();
- for (TaskDefinition def : definitions()) {
- TaskDefinition other = byClass.get(def.taskClass());
- if (other == null) {
- byClass.put(def.taskClass(), def);
- } else {
- throw new IllegalStateException("Task '" + def.taskClass().getName() + "' is defined twice: first by '" + other.key() + "' and then by '" + def.key() + "'");
- }
- }
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import org.sonar.api.task.Task;
-import org.sonar.api.task.TaskDefinition;
-import org.sonar.api.utils.MessageException;
-
-/**
- * This task is deprecated since the refresh of portfolios and application is now automatic
- * This task does nothing
- *
- * @deprecated since 7.1
- */
-@Deprecated
-public class ViewsTask implements Task {
-
- private static final String KEY = "views";
-
- public static final TaskDefinition DEFINITION = TaskDefinition.builder()
- .key(KEY)
- .description("Removed - was used to trigger portfolios refresh")
- .taskClass(ViewsTask.class)
- .build();
-
- @Override
- public void execute() {
- throw MessageException.of("The task 'views' was removed with SonarQube 7.1. You can safely remove this call since portfolios and applications are automatically re-calculated.");
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-@ParametersAreNonnullByDefault
-package org.sonar.scanner.task;
-
-import javax.annotation.ParametersAreNonnullByDefault;
props.putAll(taskProperties);
Batch.builder()
- .setScannerProperties(props)
+ .setGlobalProperties(props)
.setEnableLoggingConfiguration(true)
.addComponents(new EnvironmentInformation("mediumTest", "1.0"),
tester.pluginInstaller,
package org.sonar.scanner.mediumtest.tasks;
import com.google.common.collect.ImmutableMap;
-import org.assertj.core.api.Condition;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.task.TaskDefinition;
import org.sonar.api.utils.MessageException;
import org.sonar.api.utils.log.LogTester;
-import org.sonar.api.utils.log.LoggerLevel;
import org.sonar.scanner.mediumtest.ScannerMediumTester;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
public class TasksMediumTest {
.registerPlugin("faketask", new FakeTaskPlugin());
@Test
- public void listTasksIncludingBroken() throws Exception {
- tester.newAnalysis()
- .properties(ImmutableMap.<String, String>builder()
- .put("sonar.task", "list").build())
- .execute();
-
- assertThat(logTester.logs()).haveExactly(1, new Condition<String>() {
-
- @Override
- public boolean matches(String value) {
- return value.contains("Available tasks:") && value.contains("fake: Fake description") && value.contains("broken: Broken description");
- }
- });
-
- assertThat(logTester.logs(LoggerLevel.WARN)).contains("Scanner tasks are deprecated");
+ public void failWhenCallingTask() throws Exception {
+ try {
+ tester.newAnalysis()
+ .properties(ImmutableMap.<String, String>builder()
+ .put("sonar.task", "fake").build())
+ .execute();
+ fail("Expected exception");
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(MessageException.class).hasMessage("Tasks support was removed in SonarQube 7.6.");
+ }
}
@Test
- public void runBroken() throws Exception {
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage(
- "Unable to load component class org.sonar.scanner.mediumtest.tasks.TasksMediumTest$BrokenTask");
-
- tester.newAnalysis()
- .properties(ImmutableMap.<String, String>builder()
- .put("sonar.task", "broken").build())
- .execute();
- }
-
- @Test(expected = MessageException.class)
- public void unsupportedTask() throws Exception {
- tester.newAnalysis()
- .properties(ImmutableMap.<String, String>builder()
- .put("sonar.task", "foo").build())
- .execute();
+ public void failWhenCallingViews() throws Exception {
+ try {
+ tester.newAnalysis()
+ .properties(ImmutableMap.<String, String>builder()
+ .put("sonar.task", "views").build())
+ .execute();
+ fail("Expected exception");
+ } catch (Exception e) {
+ assertThat(e).isInstanceOf(MessageException.class).hasMessage("The task 'views' was removed with SonarQube 7.1. You can safely remove this call since portfolios and applications are automatically re-calculated.");
+ }
}
private static class FakeTaskPlugin implements Plugin {
- @Override public void define(Context context) {
- context.addExtensions(FakeTask.DEF, FakeTask.class, BrokenTask.DEF, BrokenTask.class);
+ @Override
+ public void define(Context context) {
+ context.addExtensions(FakeTask.DEF, FakeTask.class);
}
}
}
- private static class BrokenTask implements Task {
-
- public static final TaskDefinition DEF = TaskDefinition.builder().key("broken").description("Broken description").taskClass(BrokenTask.class).build();
-
- @Override
- public void execute() {
- // do nothing
- }
-
- }
-
}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import java.util.Arrays;
-import org.junit.Rule;
-import org.junit.Test;
-import org.sonar.api.task.Task;
-import org.sonar.api.task.TaskDefinition;
-import org.sonar.api.utils.log.LogTester;
-import org.sonar.api.utils.log.LoggerLevel;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class ListTaskTest {
-
- @Rule
- public LogTester logTester = new LogTester();
-
- @Test
- public void should_list_available_tasks() {
- Tasks tasks = mock(Tasks.class);
- when(tasks.definitions()).thenReturn(Arrays.asList(
- TaskDefinition.builder().key("foo").description("Foo").taskClass(FooTask.class).build(),
- TaskDefinition.builder().key("purge").description("Purge database").taskClass(FakePurgeTask.class).build()));
-
- ListTask task = new ListTask(tasks);
-
- task.execute();
-
- assertThat(logTester.logs(LoggerLevel.INFO)).hasSize(1);
- assertThat(logTester.logs(LoggerLevel.INFO).get(0)).contains("Available tasks:", " - foo: Foo", " - purge: Purge database");
- }
-
- private static class FakePurgeTask implements Task {
- public void execute() {
- }
- }
-
- private static class FooTask implements Task {
- public void execute() {
- }
- }
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.task.Task;
-import org.sonar.api.task.TaskDefinition;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TasksTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @Test
- public void should_get_definitions() {
- Tasks tasks = new Tasks(new TaskDefinition[] {ScanTask.DEFINITION, ListTask.DEFINITION});
- assertThat(tasks.definitions()).hasSize(2);
- }
-
- @Test
- public void should_get_definition_by_key() {
- Tasks tasks = new Tasks(new TaskDefinition[] {ScanTask.DEFINITION, ListTask.DEFINITION});
- tasks.start();
- assertThat(tasks.definition(ListTask.DEFINITION.key())).isEqualTo(ListTask.DEFINITION);
- }
-
- @Test
- public void should_return_null_if_task_not_found() {
- Tasks tasks = new Tasks(new TaskDefinition[] {ScanTask.DEFINITION, ListTask.DEFINITION});
-
- assertThat(tasks.definition("not-exists")).isNull();
- }
-
- @Test
- public void should_fail_on_duplicated_keys() {
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Task 'foo' is declared twice");
-
- new Tasks(new TaskDefinition[] {
- TaskDefinition.builder().key("foo").taskClass(FakeTask1.class).description("foo1").build(),
- TaskDefinition.builder().key("foo").taskClass(FakeTask2.class).description("foo2").build()
- });
- }
-
- @Test
- public void should_fail_on_duplicated_class() {
- Tasks tasks = new Tasks(new TaskDefinition[] {
- TaskDefinition.builder().key("foo1").taskClass(FakeTask1.class).description("foo1").build(),
- TaskDefinition.builder().key("foo2").taskClass(FakeTask1.class).description("foo1").build()
- });
-
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Task 'org.sonar.scanner.task.TasksTest$FakeTask1' is defined twice: first by 'foo1' and then by 'foo2'");
-
- tasks.start();
- }
-
- private static class FakeTask1 implements Task {
- public void execute() {
- }
- }
-
- private static class FakeTask2 implements Task {
- public void execute() {
- }
-
- }
-
-}
+++ /dev/null
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.sonar.scanner.task;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.utils.MessageException;
-import org.sonar.api.utils.log.LogTester;
-
-public class ViewsTaskTest {
-
- @Rule
- public LogTester logTester = new LogTester();
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- private ViewsTask underTest = new ViewsTask();
-
- @Test
- public void triggerShowError() {
- expectedException.expect(MessageException.class);
- expectedException.expectMessage(
- "The task 'views' was removed with SonarQube 7.1. You can safely remove this call since portfolios and applications are automatically re-calculated.");
-
- underTest.execute();
- }
-}