import org.sonar.server.computation.ComputationContext;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache.DbComponent;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.step.PersistFileSourcesStep;
import org.sonar.server.db.DbClient;
import org.sonar.server.source.db.FileSourceDao;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
public class PersistFileSourcesStepTest {
long start = System.currentTimeMillis();
PersistFileSourcesStep step = new PersistFileSourcesStep(dbClient, System2.INSTANCE, dbComponentsRefCache);
- step.execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings()));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings(), dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class)));
long end = System.currentTimeMillis();
long duration = end - start;
* 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.sonar.api.config.Settings;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReportReader;
+import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentTreeBuilder;
+import org.sonar.server.computation.language.LanguageRepository;
+import org.sonar.server.db.DbClient;
-public class ComputationContext {
-
+public class ComputationContext implements org.sonar.server.computation.context.ComputationContext {
private final BatchReportReader reportReader;
+ private final Settings projectSettings;
+ private final DbClient dbClient;
// Project key (including branch if any)
private final String projectKey;
// cache of metadata as it's frequently accessed
private final BatchReport.Metadata reportMetadata;
- private final Settings projectSettings;
+ private final Component component;
+ private final LanguageRepository languageRepository;
- public ComputationContext(BatchReportReader reportReader, String projectKey, Settings projectSettings) {
+ public ComputationContext(BatchReportReader reportReader, String projectKey, Settings projectSettings, DbClient dbClient,
+ ComponentTreeBuilder componentTreeBuilder, LanguageRepository languageRepository) {
this.reportReader = reportReader;
this.projectKey = projectKey;
this.projectSettings = projectSettings;
+ this.dbClient = dbClient;
this.reportMetadata = reportReader.readMetadata();
+ this.component = componentTreeBuilder.build(this);
+ this.languageRepository = languageRepository;
}
public BatchReport.Metadata getReportMetadata() {
return projectSettings;
}
+ @Override
+ public Component getRoot() {
+ return component;
+ }
+
+ /**
+ * @deprecated because dbclient is too low level to be exposed in the CE API
+ */
+ @Deprecated
+ public DbClient getDbClient() {
+ return dbClient;
+ }
+
+ @Override
+ public LanguageRepository getLanguageRepository() {
+ return languageRepository;
+ }
}
package org.sonar.server.computation;
import com.google.common.base.Throwables;
+import java.io.File;
+import java.io.IOException;
+import javax.annotation.Nullable;
import org.apache.commons.io.FileUtils;
import org.sonar.api.config.Settings;
import org.sonar.api.server.ServerSide;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.activity.Activity;
import org.sonar.server.activity.ActivityService;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.step.ComputationStep;
import org.sonar.server.computation.step.ComputationSteps;
import org.sonar.server.db.DbClient;
private final ProjectSettingsFactory projectSettingsFactory;
private final TempFolder tempFolder;
private final System2 system;
+ private final LanguageRepository languageRepository;
public ComputationService(DbClient dbClient, ComputationSteps steps, ActivityService activityService,
- ProjectSettingsFactory projectSettingsFactory, TempFolder tempFolder, System2 system) {
+ ProjectSettingsFactory projectSettingsFactory, TempFolder tempFolder, System2 system,
+ LanguageRepository languageRepository) {
this.dbClient = dbClient;
this.steps = steps;
this.activityService = activityService;
this.projectSettingsFactory = projectSettingsFactory;
this.tempFolder = tempFolder;
this.system = system;
+ this.languageRepository = languageRepository;
}
public void process(ReportQueue.Item item) {
File reportDir = extractReportInDir(item);
BatchReportReader reader = new BatchReportReader(reportDir);
Settings projectSettings = projectSettingsFactory.newProjectSettings(projectKey);
- ComputationContext context = new ComputationContext(reader, projectKey, projectSettings);
+ ComputationContext context = new ComputationContext(reader, projectKey, projectSettings, dbClient, ComponentTreeBuilders.from(reader), languageRepository);
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.component;
+
+import org.sonar.server.computation.ComputationContext;
+
+public interface ComponentTreeBuilder {
+ /**
+ * Builds the tree of components for the specified ComputationContext and returns the Component of the root of this
+ * tree.
+ */
+ Component build(ComputationContext 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.component;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import javax.annotation.Nonnull;
+import org.sonar.batch.protocol.output.BatchReport;
+import org.sonar.batch.protocol.output.BatchReportReader;
+import org.sonar.server.computation.ComputationContext;
+
+import static java.util.Objects.requireNonNull;
+
+public final class ComponentTreeBuilders {
+ public static ComponentTreeBuilder from(final BatchReportReader reportReader) {
+ // fail fast
+ requireNonNull(reportReader);
+
+ return new BatchReportComponentTreeBuilderImpl(reportReader);
+ }
+
+ public static ComponentTreeBuilder from(final Component root) {
+ // fail-fast
+ requireNonNull(root);
+ return new ComponentTreeBuilder() {
+ @Override
+ public Component build(ComputationContext context) {
+ return root;
+ }
+ };
+ }
+
+ public interface BatchReportComponentTreeBuilder extends ComponentTreeBuilder {
+
+ }
+
+ private static class BatchReportComponentTreeBuilderImpl implements BatchReportComponentTreeBuilder {
+ private final BatchReportReader reportReader;
+
+ public BatchReportComponentTreeBuilderImpl(BatchReportReader reportReader) {
+ this.reportReader = reportReader;
+ }
+
+ @Override
+ public Component build(ComputationContext context) {
+ return buildComponentRoot(context, reportReader);
+ }
+
+ private Component buildComponentRoot(ComputationContext computationContext, BatchReportReader reportReader) {
+ int rootComponentRef = computationContext.getReportMetadata().getRootComponentRef();
+ BatchReport.Component component = reportReader.readComponent(rootComponentRef);
+ return new ComponentImpl(computationContext, component, buildComponent(computationContext, rootComponentRef));
+ }
+
+ private Iterable<Component> buildComponent(final ComputationContext computationContext, int componentRef) {
+ BatchReport.Component component = computationContext.getReportReader().readComponent(componentRef);
+ return Iterables.transform(
+ component.getChildRefList(),
+ new Function<Integer, Component>() {
+ @Override
+ public Component apply(@Nonnull Integer componentRef) {
+ BatchReport.Component component = computationContext.getReportReader().readComponent(componentRef);
+ return new ComponentImpl(computationContext, component, buildComponent(computationContext, componentRef));
+ }
+ }
+ );
+ }
+ }
+}
*/
package org.sonar.server.computation;
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.junit.Before;
import org.sonar.api.utils.internal.JUnitTempFolder;
import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel;
+import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.server.activity.ActivityService;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.component.db.SnapshotDao;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.step.ComputationStep;
import org.sonar.server.computation.step.ComputationSteps;
import org.sonar.server.db.DbClient;
import org.sonar.server.properties.ProjectSettingsFactory;
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.any;
public void setUp() {
dbTester.truncateTables();
DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao(), new SnapshotDao(system));
- sut = new ComputationService(dbClient, steps, activityService, settingsFactory, tempFolder, system);
+ sut = new ComputationService(dbClient, steps, activityService, settingsFactory, tempFolder, system, mock(LanguageRepository.class));
}
@Test
.setAnalysisDate(150000000L)
.setSnapshotId(snapshotId)
.build());
+ writer.writeComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey("PROJECT_KEY")
+ .setSnapshotId(snapshotId)
+ .build());
File zip = tempFolder.newFile();
ZipUtils.zipDir(dir, zip);
return zip;
*/
package org.sonar.server.computation.component;
-import com.google.common.collect.ImmutableList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
import org.junit.Test;
import org.mockito.InOrder;
-import org.sonar.server.computation.context.ComputationContext;
-import org.sonar.server.computation.event.EventRepository;
-import org.sonar.server.computation.measure.MeasureRepository;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.spy;
public class ChildFirstTypeAwareVisitorTest {
- private static final String UNSUPPORTED_OPERATION_ERROR = "This node has no repository nor context";
-
private static final Component FILE_4 = component(FILE, 4);
private static final Component FILE_5 = component(FILE, 5);
private static final Component DIRECTORY_3 = component(DIRECTORY, 3, FILE_4, FILE_5);
}
private static Component component(final Component.Type type, final int ref, final Component... children) {
- return new Component() {
-
- @Override
- public Type getType() {
- return type;
- }
-
- @Override
- public int getRef() {
- return ref;
- }
-
- @Override
- public List<Component> getChildren() {
- return children == null ? Collections.<Component>emptyList() : ImmutableList.copyOf(Arrays.asList(children));
- }
-
- @Override
- public ComputationContext getContext() {
- throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_ERROR);
- }
-
- @Override
- public EventRepository getEventRepository() {
- throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_ERROR);
- }
-
- @Override
- public MeasureRepository getMeasureRepository() {
- throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_ERROR);
- }
- };
+ return new DumbComponent(type, ref, children);
}
+
}
--- /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.component;
+
+import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+import org.sonar.server.computation.context.ComputationContext;
+import org.sonar.server.computation.event.EventRepository;
+import org.sonar.server.computation.measure.MeasureRepository;
+
+public class DumbComponent implements Component {
+ public static final Component DUMB_PROJECT = new DumbComponent(Type.PROJECT, 1);
+
+ private static final String UNSUPPORTED_OPERATION_ERROR = "This node has no repository nor context";
+
+ @CheckForNull
+ private final ComputationContext context;
+ private final Type type;
+ private final int ref;
+ private final List<Component> children;
+
+ public DumbComponent(Type type, int ref, @Nullable Component... children) {
+ this(null, type, ref, children);
+ }
+
+ public DumbComponent(@Nullable ComputationContext context, Type type, int ref, @Nullable Component... children) {
+ this.context = context;
+ this.type = type;
+ this.ref = ref;
+ this.children = children == null ? Collections.<Component>emptyList() : ImmutableList.copyOf(Arrays.asList(children));
+ }
+
+ @Override
+ public Type getType() {
+ return type;
+ }
+
+ @Override
+ public int getRef() {
+ return ref;
+ }
+
+ @Override
+ public List<Component> getChildren() {
+ return children;
+ }
+
+ @Override
+ public ComputationContext getContext() {
+ if (context == null) {
+ throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_ERROR);
+ }
+ return context;
+ }
+
+ @Override
+ public EventRepository getEventRepository() {
+ throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_ERROR);
+ }
+
+ @Override
+ public MeasureRepository getMeasureRepository() {
+ throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_ERROR);
+ }
+}
package org.sonar.server.computation.step;
+import java.io.File;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.ComputeComponentsRefCache;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.db.DbClient;
import org.sonar.test.DbTests;
-import java.io.File;
-
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
@Category(DbTests.class)
public class FeedComponentsCacheStepTest extends BaseStepTest {
Settings projectSettings;
+ LanguageRepository languageRepository = mock(LanguageRepository.class);
+
ComputeComponentsRefCache computeComponentsRefCache;
FeedComponentsCacheStep sut;
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(computeComponentsRefCache.getByRef(1).getKey()).isEqualTo("PROJECT_KEY:origin/master");
assertThat(computeComponentsRefCache.getByRef(2).getKey()).isEqualTo("MODULE_KEY:origin/master");
import org.sonar.server.computation.ComputationContext;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache.DbComponent;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
+import org.sonar.server.db.DbClient;
import java.io.File;
import java.io.IOException;
ComponentDto project = mock(ComponentDto.class);
when(project.getId()).thenReturn(123L);
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings());
+ ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(), mock(DbClient.class), ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class));
sut.execute(context);
*/
package org.sonar.server.computation.step;
+import java.sql.Connection;
+import java.util.List;
import org.elasticsearch.search.SearchHit;
import org.junit.Before;
import org.junit.ClassRule;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
import org.sonar.server.computation.component.DbComponentsRefCache;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.db.DbClient;
import org.sonar.server.es.EsTester;
import org.sonar.server.source.db.FileSourceDao;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
public class IndexSourceLinesStepTest extends BaseStepTest {
.setRootComponentRef(1)
.build());
- step().execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings()));
+ step().execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(), dbClient,
+ ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class)));
List<SearchHit> docs = esTester.getDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE);
assertThat(docs).hasSize(1);
package org.sonar.server.computation.step;
+import java.io.File;
+import java.sql.Connection;
+import java.util.List;
import org.elasticsearch.search.SearchHit;
import org.junit.Before;
import org.junit.ClassRule;
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.db.DbClient;
import org.sonar.server.es.EsTester;
import org.sonar.server.source.db.FileSourceDao;
import org.sonar.server.test.index.TestIndexDefinition;
import org.sonar.server.test.index.TestIndexer;
-import java.io.File;
-import java.sql.Connection;
-import java.util.List;
-
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
public class IndexTestsStepTest extends BaseStepTest {
public static EsTester esTester = new EsTester().addDefinitions(new TestIndexDefinition(new Settings()));
DbClient dbClient;
+ ComputationContext underTest;
DbComponentsRefCache dbComponentsRefCache;
.setRootComponentRef(1)
.build());
- step().execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings()));
+ step().execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings(), dbClient,
+ ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class)));
List<SearchHit> docs = esTester.getDocuments(TestIndexDefinition.INDEX, TestIndexDefinition.TYPE);
assertThat(docs).hasSize(1);
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
import org.sonar.server.computation.component.ComputeComponentsRefCache;
import org.sonar.server.computation.issue.IssueComputation;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import org.sonar.server.computation.language.LanguageRepository;
+import org.sonar.server.db.DbClient;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
File reportDir = generateReport();
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings());
+ ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(),
+ mock(DbClient.class), ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class));
sut.execute(context);
assertThat(context.getReportMetadata().getRootComponentRef()).isEqualTo(1);
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.ComputeComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.db.DbClient;
import org.sonar.test.DbTests;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
@Category(DbTests.class)
public class PersistComponentsStepTest extends BaseStepTest {
DbClient dbClient;
Settings projectSettings;
+ LanguageRepository languageRepository;
ComputeComponentsRefCache computeComponentsRefCache;
DbComponentsRefCache dbComponentsRefCache;
computeComponentsRefCache = new ComputeComponentsRefCache();
projectSettings = new Settings();
+ languageRepository = mock(LanguageRepository.class);
dbComponentsRefCache = new DbComponentsRefCache();
sut = new PersistComponentsStep(dbClient, computeComponentsRefCache, dbComponentsRefCache);
}
.setLanguage("java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
.setPath("pom.xml")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:/");
assertThat(directory).isNotNull();
.setIsTest(true)
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
.setPath("src/main/java/dir")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
.setPath("src/main/java/dir/Foo.java")
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache.DbComponent;
import org.sonar.server.db.DbClient;
import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
@Category(DbTests.class)
public class PersistDuplicationsStepTest extends BaseStepTest {
DbClient dbClient;
Settings projectSettings;
+ LanguageRepository languageRepository;
DbComponentsRefCache dbComponentsRefCache;
projectSettings = new Settings();
dbComponentsRefCache = new DbComponentsRefCache();
+ languageRepository = mock(LanguageRepository.class);
sut = new PersistDuplicationsStep(dbClient, dbComponentsRefCache);
}
saveDuplicationMetric();
initReportWithProjectAndFile();
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(0);
}
.build();
writer.writeComponentDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(3, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(3, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(10, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
.build();
writer.writeComponentDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache.DbComponent;
import org.sonar.server.db.DbClient;
public static DbTester dbTester = new DbTester();
DbSession session;
+ DbClient dbClient;
+ LanguageRepository languageRepository;
EventDao dao;
when(system2.now()).thenReturn(1225630680000L);
projectSettings = new Settings();
+ languageRepository = mock(LanguageRepository.class);
dbComponentsRefCache = new DbComponentsRefCache();
step = new PersistEventsStep(dbClient, system2, dbComponentsRefCache);
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "nothing_to_do_when_no_events_in_report.xml", "events");
}
)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "add_events-result.xml", "events");
}
.build()
).build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "add_version_event-result.xml", "events");
}
.setVersion("1.5-SNAPSHOT")
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "keep_one_event_by_version-result.xml", "events");
}
package org.sonar.server.computation.step;
+import com.google.common.base.Optional;
import com.google.common.collect.Lists;
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.config.Settings;
+import org.sonar.api.resources.Language;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.core.source.db.FileSourceDto;
import org.sonar.core.source.db.FileSourceDto.Type;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
import org.sonar.server.source.db.FileSourceDao;
import org.sonar.server.source.db.FileSourceDb;
import org.sonar.test.DbTests;
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
DbClient dbClient;
Settings projectSettings;
+ LanguageRepository languageRepository;
System2 system2;
session = dbTester.myBatis().openSession(false);
dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new FileSourceDao(dbTester.myBatis()));
projectSettings = new Settings();
+ languageRepository = mock(LanguageRepository.class);
reportDir = temp.newFolder();
public void persist_sources() throws Exception {
initBasicReport(2);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders .from(DumbComponent.DUMB_PROJECT), new EmptyLanguageRepository()));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
.build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
).build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
.build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
BatchReportWriter writer = initBasicReport(1);
writer.writeComponentSyntaxHighlighting(FILE_REF, newArrayList(BatchReport.SyntaxHighlighting.newBuilder()
- .setRange(BatchReport.Range.newBuilder()
- .setStartLine(1).setEndLine(1)
- // Wrong offset -> fail
- .setStartOffset(4).setEndOffset(2)
- .build())
- .setType(Constants.HighlightingType.ANNOTATION)
- .build()
- ));
+ .setRange(BatchReport.Range.newBuilder()
+ .setStartLine(1).setEndLine(1)
+ // Wrong offset -> fail
+ .setStartOffset(4).setEndOffset(2)
+ .build())
+ .setType(Constants.HighlightingType.ANNOTATION)
+ .build()
+ ));
try {
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
failBecauseExceptionWasNotThrown(IllegalStateException.class);
- } catch (IllegalStateException e){
+ } catch (IllegalStateException e) {
assertThat(e).hasMessage("Cannot persist sources of src/Foo.java").hasCauseInstanceOf(IllegalArgumentException.class);
}
}
return writer;
}
+ private static class EmptyLanguageRepository implements LanguageRepository {
+ @Override
+ public Optional<Language> find(String languageKey) {
+ return Optional.absent();
+ }
+ }
}
package org.sonar.server.computation.step;
+import java.io.File;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
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.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.core.rule.RuleDto;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
+import org.sonar.server.computation.component.DumbComponent;
import org.sonar.server.computation.issue.RuleCache;
import org.sonar.server.computation.issue.RuleCacheLoader;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.measure.MetricCache;
import org.sonar.server.db.DbClient;
import org.sonar.server.measure.persistence.MeasureDao;
import org.sonar.server.rule.db.RuleDao;
import org.sonar.test.DbTests;
-import java.io.File;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
@Category(DbTests.class)
public class PersistMeasuresStepTest extends BaseStepTest {
.setCharactericId(123456)
.build()));
- sut.execute(new ComputationContext(new BatchReportReader(dir), PROJECT_KEY, new Settings()));
+ sut.execute(new ComputationContext(new BatchReportReader(dir), PROJECT_KEY, new Settings(),
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class)));
session.commit();
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(2);
.setSnapshotId(3);
}
- private ComponentDto addComponent(int ref, String key){
+ private ComponentDto addComponent(int ref, String key) {
ComponentDto componentDto = new ComponentDto().setKey(key).setUuid(Uuids.create());
dbClient.componentDao().insert(session, componentDto);
session.commit();
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
import org.sonar.server.computation.component.DbComponentsRefCache;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.measure.MetricCache;
import org.sonar.server.db.DbClient;
import org.sonar.server.measure.persistence.MeasureDao;
SourceLineIndex sourceLineIndex;
MetricCache metricCache;
Settings projectSettings;
+ LanguageRepository languageRepository;
DbComponentsRefCache dbComponentsRefCache;
sourceLineIndex = mock(SourceLineIndex.class);
metricCache = mock(MetricCache.class);
projectSettings = new Settings();
+ languageRepository = mock(LanguageRepository.class);
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", projectSettings);
+ ComputationContext context = new ComputationContext(new BatchReportReader(dir), "PROJECT_KEY", projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository);
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", projectSettings);
+ ComputationContext context = new ComputationContext(new BatchReportReader(dir), "PROJECT_KEY", projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository);
sut.execute(context);
@Test
public void no_scm_information_in_report_and_index() {
initReportWithProjectAndFile();
- ComputationContext context = new ComputationContext(new BatchReportReader(dir),"PROJECT_KEY", projectSettings);
+ ComputationContext context = new ComputationContext(new BatchReportReader(dir),"PROJECT_KEY", projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository);
sut.execute(context);
import org.sonar.core.persistence.DbTester;
import org.sonar.server.component.db.ComponentLinkDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
import org.sonar.test.DbTests;
public static DbTester dbTester = new DbTester();
DbSession session;
+ DbClient dbClient;
Settings projectSettings;
+ LanguageRepository languageRepository;
ComponentLinkDao dao;
session = dbTester.myBatis().openSession(false);
dao = new ComponentLinkDao();
projectSettings = new Settings();
- DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), dao);
+ languageRepository = mock(LanguageRepository.class);
+ dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), dao);
i18n = mock(I18n.class);
when(i18n.message(Locale.ENGLISH, "project_links.homepage", null)).thenReturn("Home");
.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, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "update_link-result.xml", "project_links");
}
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_links")).isEqualTo(0);
}
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "not_delete_custom_link.xml", "project_links");
}
.build());
try {
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings));
+ step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
failBecauseExceptionWasNotThrown(IllegalArgumentException.class);
} catch (IllegalArgumentException e) {
assertThat(e).hasMessage("Link of type 'homepage' has already been declared on component 'ABCD'");
import org.sonar.core.persistence.MyBatis;
import org.sonar.core.source.db.FileSourceDto;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache.DbComponent;
import org.sonar.server.db.DbClient;
DbClient dbClient;
System2 system2;
Settings projectSettings;
+ LanguageRepository languageRepository;
long now = 123456789L;
dbClient = new DbClient(db.database(), db.myBatis(), new FileSourceDao(db.myBatis()));
reportDir = temp.newFolder();
projectSettings = new Settings();
+ languageRepository = mock(LanguageRepository.class);
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
// ASSERT
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
import org.sonar.core.persistence.DbSession;
import org.sonar.core.purge.IdUuidPair;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
.build());
ComponentDto project = mock(ComponentDto.class);
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings());
+ ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(), mock(DbClient.class), ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class));
sut.execute(context);
import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
+import org.sonar.server.computation.component.DumbComponent;
import org.sonar.server.computation.issue.IssueCache;
import org.sonar.server.computation.issue.RuleCache;
+import org.sonar.server.computation.language.LanguageRepository;
+import org.sonar.server.db.DbClient;
import org.sonar.server.issue.notification.IssueChangeNotification;
import org.sonar.server.issue.notification.NewIssuesNotification;
import org.sonar.server.issue.notification.NewIssuesNotificationFactory;
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ mock(DbClient.class), ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1)), mock(LanguageRepository.class)));
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, projectSettings));
+ sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ mock(DbClient.class), ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1)), mock(LanguageRepository.class)));
verify(notifService).deliver(any(NewIssuesNotification.class));
verify(notifService, atLeastOnce()).deliver(any(IssueChangeNotification.class));