quality profile events computation requires to access the Language in the container
import org.junit.rules.TemporaryFolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.sonar.api.config.Settings;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.internal.Uuids;
import org.sonar.batch.protocol.Constants;
long start = System.currentTimeMillis();
PersistFileSourcesStep step = new PersistFileSourcesStep(dbClient, System2.INSTANCE, dbComponentsRefCache);
- step.execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY"));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings()));
long end = System.currentTimeMillis();
long duration = end - start;
*/
package org.sonar.server.computation;
+import java.util.Arrays;
+import java.util.List;
+
import org.sonar.core.issue.db.UpdateConflictResolver;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.server.computation.component.ComputeComponentsRefCache;
import org.sonar.server.computation.issue.ScmAccountCache;
import org.sonar.server.computation.issue.ScmAccountCacheLoader;
import org.sonar.server.computation.issue.SourceLinesCache;
+import org.sonar.server.computation.language.PlatformLanguageRepository;
import org.sonar.server.computation.measure.MetricCache;
import org.sonar.server.computation.step.ComputationSteps;
import org.sonar.server.platform.Platform;
import org.sonar.server.view.index.ViewIndex;
-import java.util.Arrays;
-import java.util.List;
-
public class ComputationContainer {
/**
*/
static List componentClasses() {
return Arrays.asList(
+ // context-scope repositories
+ PlatformLanguageRepository.class,
+
ComputationService.class,
ComputationSteps.class,
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReportReader;
-import static com.google.common.base.Preconditions.checkState;
-
public class ComputationContext {
private final BatchReportReader reportReader;
private final String projectKey;
// cache of metadata as it's frequently accessed
private final BatchReport.Metadata reportMetadata;
- private Settings projectSettings;
+ private final Settings projectSettings;
- public ComputationContext(BatchReportReader reportReader, String projectKey) {
+ public ComputationContext(BatchReportReader reportReader, String projectKey, Settings projectSettings) {
this.reportReader = reportReader;
this.projectKey = projectKey;
+ this.projectSettings = projectSettings;
this.reportMetadata = reportReader.readMetadata();
}
return projectSettings;
}
- public void setProjectSettings(Settings projectSettings) {
- checkState(this.projectSettings == null, "can't set project settings twice");
- this.projectSettings = projectSettings;
- }
}
import com.google.common.base.Throwables;
import org.apache.commons.io.FileUtils;
+import org.sonar.api.config.Settings;
import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.TempFolder;
try {
File reportDir = extractReportInDir(item);
BatchReportReader reader = new BatchReportReader(reportDir);
- ComputationContext context = new ComputationContext(reader, projectKey);
- context.setProjectSettings(projectSettingsFactory.newProjectSettings(projectKey));
+ Settings projectSettings = projectSettingsFactory.newProjectSettings(projectKey);
+ ComputationContext context = new ComputationContext(reader, projectKey, projectSettings);
for (ComputationStep step : steps.orderedSteps()) {
Profiler stepProfiler = Profiler.createIfDebug(LOG).startDebug(step.getDescription());
step.execute(context);
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.server.computation.language;
+
+import com.google.common.base.Optional;
+import org.sonar.api.resources.Language;
+
+public interface LanguageRepository {
+ Optional<Language> find(String languageKey);
+}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.server.computation.language;
+
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import java.util.Collections;
+import java.util.Map;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.sonar.api.resources.Language;
+
+import static com.google.common.base.Predicates.notNull;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Maps.uniqueIndex;
+import static java.util.Arrays.asList;
+
+/**
+ * Implementation of {@link LanguageRepository} which find {@link Language} instances available in the container.
+ */
+public class PlatformLanguageRepository implements LanguageRepository {
+
+ private final Map<String, Language> languagesByKey;
+
+ public PlatformLanguageRepository(@Nullable Language... languages) {
+ this.languagesByKey = languages == null ? Collections.<String, Language>emptyMap() : uniqueIndex(filter(asList(languages), notNull()), LanguageToKey.INSTANCE);
+ }
+
+ @Override
+ public Optional<Language> find(String languageKey) {
+ return Optional.fromNullable(languagesByKey.get(languageKey));
+ }
+
+ private enum LanguageToKey implements Function<Language, String> {
+ INSTANCE;
+
+ @Override
+ public String apply(@Nonnull Language input) {
+ return input.getKey();
+ }
+ }
+}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.server.computation.language;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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.server.computation;
-
-import org.junit.Test;
-import org.sonar.api.config.Settings;
-import org.sonar.batch.protocol.output.BatchReportReader;
-
-import static org.mockito.Mockito.mock;
-
-public class ComputationContextTest {
-
- ComputationContext sut = new ComputationContext(mock(BatchReportReader.class), "ProjectKey");
-
- @Test(expected = IllegalStateException.class)
- public void setProjectSettings() {
- sut.setProjectSettings(mock(Settings.class));
- sut.setProjectSettings(mock(Settings.class));
- }
-}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.server.computation.language;
+
+import com.google.common.base.Optional;
+import org.junit.Test;
+import org.sonar.api.resources.Language;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class PlatformLanguageRepositoryTest {
+
+ private static final String ANY_KEY = "Any_Key";
+ private static final String SOME_LANGUAGE_KEY = "SoMe language_Key";
+ private static final Language SOME_LANGUAGE = createLanguage(SOME_LANGUAGE_KEY, "_name");
+
+ @Test(expected = IllegalArgumentException.class)
+ public void constructor_fails_is_language_have_the_same_key() throws Exception {
+ new PlatformLanguageRepository(createLanguage(SOME_LANGUAGE_KEY, " 1"), createLanguage(SOME_LANGUAGE_KEY, " 2"));
+ }
+
+ @Test
+ public void find_on_empty_LanguageRepository_returns_absent() throws Exception {
+ assertThat(new PlatformLanguageRepository().find(ANY_KEY).isPresent()).isFalse();
+ }
+
+ @Test
+ public void find_by_key_returns_the_same_object() throws Exception {
+ PlatformLanguageRepository languageRepository = new PlatformLanguageRepository(SOME_LANGUAGE);
+ Optional<Language> language = languageRepository.find(SOME_LANGUAGE_KEY);
+ assertThat(language.isPresent()).isTrue();
+ assertThat(language.get()).isSameAs(SOME_LANGUAGE);
+ }
+
+ @Test
+ public void find_by_other_key_returns_absent() throws Exception {
+ PlatformLanguageRepository languageRepository = new PlatformLanguageRepository(SOME_LANGUAGE);
+ Optional<Language> language = languageRepository.find(ANY_KEY);
+ assertThat(language.isPresent()).isFalse();
+ }
+
+ private static Language createLanguage(final String key, final String nameSuffix) {
+ return new Language() {
+ @Override
+ public String getKey() {
+ return key;
+ }
+
+ @Override
+ public String getName() {
+ return key + nameSuffix;
+ }
+
+ @Override
+ public String[] getFileSuffixes() {
+ return new String[0];
+ }
+ };
+ }
+}
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReportReader;
DbClient dbClient;
+ Settings projectSettings;
+
ComputeComponentsRefCache computeComponentsRefCache;
FeedComponentsCacheStep sut;
reportDir = temp.newFolder();
computeComponentsRefCache = new ComputeComponentsRefCache();
+ projectSettings = new Settings();
sut = new FeedComponentsCacheStep(dbClient, computeComponentsRefCache);
}
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(computeComponentsRefCache.getByRef(1).getKey()).isEqualTo(PROJECT_KEY);
assertThat(computeComponentsRefCache.getByRef(1).getUuid()).isNotNull();
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(computeComponentsRefCache.getByRef(4).getKey()).isEqualTo("SUB_MODULE_KEY:src/main/java/dir");
assertThat(computeComponentsRefCache.getByRef(5).getKey()).isEqualTo("SUB_MODULE_KEY:src/main/java/dir/Foo.java");
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(computeComponentsRefCache.getByRef(1).getKey()).isEqualTo("PROJECT_KEY:origin/master");
assertThat(computeComponentsRefCache.getByRef(2).getKey()).isEqualTo("MODULE_KEY:origin/master");
import org.junit.Rule;
import org.junit.Test;
+import org.sonar.api.config.Settings;
import org.junit.rules.TemporaryFolder;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReportReader;
ComponentDto project = mock(ComponentDto.class);
when(project.getId()).thenReturn(123L);
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY);
+ ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings());
sut.execute(context);
.setRootComponentRef(1)
.build());
- step().execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step().execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings()));
List<SearchHit> docs = esTester.getDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE);
assertThat(docs).hasSize(1);
.setRootComponentRef(1)
.build());
- step().execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY"));
+ step().execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings()));
List<SearchHit> docs = esTester.getDocuments(TestIndexDefinition.INDEX, TestIndexDefinition.TYPE);
assertThat(docs).hasSize(1);
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReportReader;
File reportDir = generateReport();
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY);
+ ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings());
sut.execute(context);
assertThat(context.getReportMetadata().getRootComponentRef()).isEqualTo(1);
package org.sonar.server.computation.step;
+import java.io.File;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.server.db.DbClient;
import org.sonar.test.DbTests;
-import java.io.File;
-
import static org.assertj.core.api.Assertions.assertThat;
@Category(DbTests.class)
DbClient dbClient;
+ Settings projectSettings;
ComputeComponentsRefCache computeComponentsRefCache;
DbComponentsRefCache dbComponentsRefCache;
reportDir = temp.newFolder();
computeComponentsRefCache = new ComputeComponentsRefCache();
+ projectSettings = new Settings();
dbComponentsRefCache = new DbComponentsRefCache();
sut = new PersistComponentsStep(dbClient, computeComponentsRefCache, dbComponentsRefCache);
}
.setLanguage("java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
.setPath("pom.xml")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:/");
assertThat(directory).isNotNull();
.setIsTest(true)
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
ComponentDto file = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:src/test/java/dir/FooTest.java");
assertThat(file).isNotNull();
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
.setPath("src/main/java/dir")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
assertThat(dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY).getId()).isEqualTo(project.getId());
.setDescription("New module description")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
assertThat(projectReloaded.name()).isEqualTo("New project name");
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
DbClient dbClient;
+ Settings projectSettings;
+
DbComponentsRefCache dbComponentsRefCache;
PersistDuplicationsStep sut;
reportDir = temp.newFolder();
+ projectSettings = new Settings();
dbComponentsRefCache = new DbComponentsRefCache();
sut = new PersistDuplicationsStep(dbClient, dbComponentsRefCache);
}
saveDuplicationMetric();
initReportWithProjectAndFile();
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(0);
}
.build();
writer.writeComponentDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(3, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(3, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(10, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
package org.sonar.server.computation.step;
+import java.io.File;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.server.event.db.EventDao;
import org.sonar.test.DbTests;
-import java.io.File;
-
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
System2 system2;
+ Settings projectSettings;
+
DbComponentsRefCache dbComponentsRefCache;
PersistEventsStep step;
system2 = mock(System2.class);
when(system2.now()).thenReturn(1225630680000L);
+ projectSettings = new Settings();
+
dbComponentsRefCache = new DbComponentsRefCache();
step = new PersistEventsStep(dbClient, system2, dbComponentsRefCache);
}
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "nothing_to_do_when_no_events_in_report.xml", "events");
}
)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "add_events-result.xml", "events");
}
.build()
).build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "persist_report_events_with_component_children-result.xml", "events");
}
.setVersion("1.0")
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "add_version_event-result.xml", "events");
}
.setVersion("1.5-SNAPSHOT")
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "keep_one_event_by_version-result.xml", "events");
}
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
DbClient dbClient;
+ Settings projectSettings;
+
System2 system2;
DbComponentsRefCache dbComponentsRefCache;
dbTester.truncateTables();
session = dbTester.myBatis().openSession(false);
dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new FileSourceDao(dbTester.myBatis()));
+ projectSettings = new Settings();
reportDir = temp.newFolder();
public void persist_sources() throws Exception {
initBasicReport(2);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
.setLines(3)
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
public void persist_source_hashes() throws Exception {
initBasicReport(2);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource("FILE");
.setOverallCoveredConditions(4)
.build()));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
.addChangesetIndexByLine(0)
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
.build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
).build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
.build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
// Sources from the report
initBasicReport(1);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
initBasicReport(1);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
initBasicReport(1);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
));
try {
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
failBecauseExceptionWasNotThrown(IllegalStateException.class);
} catch (IllegalStateException e){
assertThat(e).hasMessage("Cannot persist sources of src/Foo.java").hasCauseInstanceOf(IllegalArgumentException.class);
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+import org.sonar.api.config.Settings;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
import org.sonar.api.utils.System2;
.setCharactericId(123456)
.build()));
- sut.execute(new ComputationContext(new BatchReportReader(dir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(dir), PROJECT_KEY, new Settings()));
session.commit();
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(2);
package org.sonar.server.computation.step;
+import java.io.File;
+import java.util.Date;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.server.measure.persistence.MeasureDao;
import org.sonar.server.source.index.SourceLineIndex;
-import java.io.File;
-import java.util.Date;
-
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
DbClient dbClient;
SourceLineIndex sourceLineIndex;
MetricCache metricCache;
+ Settings projectSettings;
DbComponentsRefCache dbComponentsRefCache;
dbClient = new DbClient(db.database(), db.myBatis(), new MeasureDao());
sourceLineIndex = mock(SourceLineIndex.class);
metricCache = mock(MetricCache.class);
+ projectSettings = new Settings();
when(metricCache.get(anyString())).thenReturn(new MetricDto().setId(10));
dbComponentsRefCache = new DbComponentsRefCache();
dir = temp.newFolder();
)
.build()
);
- ComputationContext context = new ComputationContext(new BatchReportReader(dir), "PROJECT_KEY");
+ ComputationContext context = new ComputationContext(new BatchReportReader(dir), "PROJECT_KEY", projectSettings);
sut.execute(context);
Date sixDaysAgo = DateUtils.addDays(new Date(), -6);
when(sourceLineIndex.lastCommitDateOnProject("project-uuid")).thenReturn(sixDaysAgo);
initReportWithProjectAndFile();
- ComputationContext context = new ComputationContext(new BatchReportReader(dir), "PROJECT_KEY");
+ ComputationContext context = new ComputationContext(new BatchReportReader(dir), "PROJECT_KEY", projectSettings);
sut.execute(context);
@Test
public void no_scm_information_in_report_and_index() {
initReportWithProjectAndFile();
- ComputationContext context = new ComputationContext(new BatchReportReader(dir),"PROJECT_KEY");
+ ComputationContext context = new ComputationContext(new BatchReportReader(dir),"PROJECT_KEY", projectSettings);
sut.execute(context);
package org.sonar.server.computation.step;
+import java.io.File;
+import java.util.Locale;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.api.i18n.I18n;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.server.db.DbClient;
import org.sonar.test.DbTests;
-import java.io.File;
-import java.util.Locale;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
import static org.mockito.Mockito.mock;
public static DbTester dbTester = new DbTester();
DbSession session;
+ Settings projectSettings;
ComponentLinkDao dao;
public void setup() {
session = dbTester.myBatis().openSession(false);
dao = new ComponentLinkDao();
+ projectSettings = new Settings();
DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), dao);
i18n = mock(I18n.class);
.addLink(BatchReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.SCM).setHref("https://github.com/SonarSource/sonar/server").build())
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "add_links_on_project_and_module-result.xml", "project_links");
}
.addLink(BatchReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "nothing_to_do_when_link_already_exists.xml", "project_links");
}
.addLink(BatchReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_links")).isEqualTo(0);
}
.addLink(BatchReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "update_link-result.xml", "project_links");
}
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbTester.countRowsOfTable("project_links")).isEqualTo(0);
}
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
dbTester.assertDbUnit(getClass(), "not_delete_custom_link.xml", "project_links");
}
.build());
try {
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
} catch (IllegalArgumentException e) {
assertThat(e).hasMessage("Link of type 'homepage' has already been declared on component 'ABCD'");
package org.sonar.server.computation.step;
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.sonar.api.config.Settings;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel;
import org.sonar.server.source.db.FileSourceDao;
import org.sonar.server.source.db.FileSourceDb;
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
import static org.mockito.Mockito.mock;
DbSession session;
DbClient dbClient;
System2 system2;
+ Settings projectSettings;
long now = 123456789L;
session = db.myBatis().openSession(false);
dbClient = new DbClient(db.database(), db.myBatis(), new FileSourceDao(db.myBatis()));
reportDir = temp.newFolder();
+ projectSettings = new Settings();
system2 = mock(System2.class);
when(system2.now()).thenReturn(now);
@Test
public void no_test_in_database_and_batch_report() {
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1)).isNull();
assertThat(log.logs()).isEmpty();
);
writer.writeCoverageDetails(TEST_FILE_REF_1, coverageDetails);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(db.countRowsOfTable("file_sources")).isEqualTo(1);
writer.writeTests(TEST_FILE_REF_1, Arrays.asList(newTest(1)));
writer.writeCoverageDetails(TEST_FILE_REF_1, Arrays.asList(newCoverageDetail(1, MAIN_FILE_REF_1)));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
assertThat(dto.getCreatedAt()).isEqualTo(now);
List<BatchReport.Test> batchTests = Arrays.asList(newTest(1));
writer.writeTests(TEST_FILE_REF_1, batchTests);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
assertThat(dto.getFileUuid()).isEqualTo(TEST_FILE_UUID_1);
writer.writeCoverageDetails(TEST_FILE_REF_1, coverageDetails);
writer.writeCoverageDetails(TEST_FILE_REF_2, coverageDetails);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
assertThat(log.logs(LoggerLevel.WARN)).hasSize(1);
assertThat(log.logs(LoggerLevel.WARN).get(0)).isEqualTo("Some coverage tests are not taken into account during analysis of project 'PROJECT_KEY'");
newCoverageDetailWithLines(1, MAIN_FILE_REF_1, 1, 3),
newCoverageDetailWithLines(1, MAIN_FILE_REF_1, 2, 4)));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
List<Integer> coveredLines = dto.getTestData().get(0).getCoveredFile(0).getCoveredLineList();
writer.writeCoverageDetails(TEST_FILE_REF_1, Arrays.asList(newCoverageDetail));
// ACT
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
// ASSERT
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
.build());
ComponentDto project = mock(ComponentDto.class);
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY);
+ ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings());
sut.execute(context);
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
+import org.sonar.api.config.Settings;
import org.sonar.api.issue.internal.DefaultIssue;
import org.sonar.api.notifications.Notification;
import org.sonar.api.rule.Severity;
IssueCache issueCache;
DbComponentsRefCache dbComponentsRefCache;
NewIssuesNotificationFactory newIssuesNotificationFactory = mock(NewIssuesNotificationFactory.class, Mockito.RETURNS_DEEP_STUBS);
+ Settings projectSettings = new Settings();
SendIssueNotificationsStep sut;
File reportDir;
public void do_not_send_notifications_if_no_subscribers() throws IOException {
when(notifService.hasProjectSubscribersForTypes(PROJECT_UUID, SendIssueNotificationsStep.NOTIF_TYPES)).thenReturn(false);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
verify(notifService, never()).deliver(any(Notification.class));
}
when(notifService.hasProjectSubscribersForTypes(PROJECT_UUID, SendIssueNotificationsStep.NOTIF_TYPES)).thenReturn(true);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
verify(notifService).deliver(any(NewIssuesNotification.class));
verify(notifService, atLeastOnce()).deliver(any(IssueChangeNotification.class));