import org.sonar.api.utils.internal.Uuids;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache.DbComponent;
@Rule
public Benchmark benchmark = new Benchmark();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
@Test
public void benchmark() throws Exception {
- File reportDir = prepareReport();
- persistFileSources(reportDir);
+ prepareReport();
+ persistFileSources();
}
- private void persistFileSources(File reportDir) {
+ private void persistFileSources() {
LOGGER.info("Persist file sources");
DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new FileSourceDao(dbTester.myBatis()));
long start = System.currentTimeMillis();
PersistFileSourcesStep step = new PersistFileSourcesStep(dbClient, System2.INSTANCE, dbComponentsRefCache);
- step.execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings(), dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class)));
+ step.execute(new ComputationContext(reportReader, "PROJECT_KEY", new Settings(), dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class)));
long end = System.currentTimeMillis();
long duration = end - start;
benchmark.expectAround("Duration to persist FILE_SOURCES", duration, 105000, Benchmark.DEFAULT_ERROR_MARGIN_PERCENTS);
}
- private File prepareReport() throws IOException {
+ private void prepareReport() throws IOException {
LOGGER.info("Create report");
File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
+ .setRootComponentRef(1)
+ .build());
BatchReport.Component.Builder project = BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT);
dbComponentsRefCache.addComponent(1, new DbComponent(1L, "PROJECT", PROJECT_UUID));
for (int fileRef = 2; fileRef <= NUMBER_OF_FILES + 1; fileRef++) {
- generateFileReport(writer, fileRef);
+ generateFileReport(new BatchReportWriter(reportDir), fileRef);
project.addChildRef(fileRef);
}
- writer.writeComponent(project.build());
-
- return reportDir;
+ reportReader.putComponent(project.build());
}
private void generateFileReport(BatchReportWriter writer, int fileRef) throws IOException {
for (int line = 1; line <= NUMBER_OF_LINES; line++) {
lineData.generateLineData(line);
}
- writer.writeComponent(BatchReport.Component.newBuilder()
- .setRef(fileRef)
- .setType(Constants.ComponentType.FILE)
- .setLines(NUMBER_OF_LINES)
- .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(fileRef)
+ .setType(Constants.ComponentType.FILE)
+ .setLines(NUMBER_OF_LINES)
+ .build());
dbComponentsRefCache.addComponent(fileRef, new DbComponent((long) fileRef, "PROJECT:" + fileRef, Uuids.create()));
FileUtils.writeLines(writer.getSourceFile(fileRef), lineData.lines);
- writer.writeComponentCoverage(fileRef, lineData.coverages);
- writer.writeComponentChangesets(lineData.changesetsBuilder.setComponentRef(fileRef).build());
- writer.writeComponentSyntaxHighlighting(fileRef, lineData.highlightings);
- writer.writeComponentSymbols(fileRef, lineData.symbols);
- writer.writeComponentDuplications(fileRef, lineData.duplications);
+ reportReader.putCoverage(fileRef, writer.writeComponentCoverage(fileRef, lineData.coverages));
+ reportReader.putChangesets(lineData.changesetsBuilder.setComponentRef(fileRef).build());
+ reportReader.putSyntaxHighlighting(fileRef, writer.writeComponentSyntaxHighlighting(fileRef, lineData.highlightings));
+ reportReader.putSymbols(fileRef, lineData.symbols);
+ reportReader.putDuplications(fileRef, lineData.duplications);
}
private static class LineData {
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.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentTreeBuilder;
import org.sonar.server.computation.language.LanguageRepository;
package org.sonar.server.computation;
import com.google.common.base.Throwables;
+import java.io.File;
+import java.io.IOException;
+import javax.annotation.CheckForNull;
import org.apache.commons.io.FileUtils;
import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.activity.Activity;
import org.sonar.server.activity.ActivityService;
+import org.sonar.server.computation.batch.BatchReportReader;
+import org.sonar.server.computation.batch.FileBatchReportReader;
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;
-import org.sonar.server.properties.ProjectSettingsFactory;
-
-import javax.annotation.CheckForNull;
-
-import java.io.File;
-import java.io.IOException;
import static org.sonar.api.utils.DateUtils.formatDateTimeNullSafe;
import static org.sonar.api.utils.DateUtils.longToDate;
private final DbClient dbClient;
private final ComputationSteps steps;
private final ActivityService activityService;
- 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,
- LanguageRepository languageRepository) {
+ 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;
try {
File reportDir = extractReportInDir(item);
- BatchReportReader reader = new BatchReportReader(reportDir);
+ BatchReportReader reader = new FileBatchReportReader(new org.sonar.batch.protocol.output.BatchReportReader(reportDir));
ComputationContext context = new ComputationContext(reader, null, null, dbClient, ComponentTreeBuilders.from(reader), languageRepository);
for (ComputationStep step : steps.orderedSteps()) {
Profiler stepProfiler = Profiler.createIfDebug(LOG).startDebug(step.getDescription());
--- /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.batch;
+
+import java.io.File;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import org.sonar.batch.protocol.output.BatchReport;
+
+public interface BatchReportReader {
+ BatchReport.Metadata readMetadata();
+
+ List<BatchReport.Measure> readComponentMeasures(int componentRef);
+
+ @CheckForNull
+ BatchReport.Changesets readChangesets(int componentRef);
+
+ BatchReport.Component readComponent(int componentRef);
+
+ List<BatchReport.Issue> readComponentIssues(int componentRef);
+
+ BatchReport.Issues readDeletedComponentIssues(int deletedComponentRef);
+
+ List<BatchReport.Duplication> readComponentDuplications(int componentRef);
+
+ List<BatchReport.Symbols.Symbol> readComponentSymbols(int componentRef);
+
+ boolean hasSyntaxHighlighting(int componentRef);
+
+ @CheckForNull
+ File readComponentSyntaxHighlighting(int fileRef);
+
+ @CheckForNull
+ File readComponentCoverage(int fileRef);
+
+ File readFileSource(int fileRef);
+
+ @CheckForNull
+ File readTests(int testFileRef);
+
+ @CheckForNull
+ File readCoverageDetails(int testFileRef);
+}
--- /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.batch;
+
+import java.io.File;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import org.sonar.batch.protocol.output.BatchReport;
+
+public class FileBatchReportReader implements BatchReportReader {
+ private final org.sonar.batch.protocol.output.BatchReportReader delegate;
+
+ public FileBatchReportReader(org.sonar.batch.protocol.output.BatchReportReader delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public BatchReport.Metadata readMetadata() {
+ return delegate.readMetadata();
+ }
+
+ @Override
+ public List<BatchReport.Measure> readComponentMeasures(int componentRef) {
+ return delegate.readComponentMeasures(componentRef);
+ }
+
+ @Override
+ @CheckForNull
+ public BatchReport.Changesets readChangesets(int componentRef) {
+ return delegate.readChangesets(componentRef);
+ }
+
+ @Override
+ public BatchReport.Component readComponent(int componentRef) {
+ return delegate.readComponent(componentRef);
+ }
+
+ @Override
+ public List<BatchReport.Issue> readComponentIssues(int componentRef) {
+ return delegate.readComponentIssues(componentRef);
+ }
+
+ @Override
+ public BatchReport.Issues readDeletedComponentIssues(int deletedComponentRef) {
+ return delegate.readDeletedComponentIssues(deletedComponentRef);
+ }
+
+ @Override
+ public List<BatchReport.Duplication> readComponentDuplications(int componentRef) {
+ return delegate.readComponentDuplications(componentRef);
+ }
+
+ @Override
+ public List<BatchReport.Symbols.Symbol> readComponentSymbols(int componentRef) {
+ return delegate.readComponentSymbols(componentRef);
+ }
+
+ @Override
+ public boolean hasSyntaxHighlighting(int componentRef) {
+ return delegate.hasSyntaxHighlighting(componentRef);
+ }
+
+ @Override
+ @CheckForNull
+ public File readComponentSyntaxHighlighting(int fileRef) {
+ return delegate.readComponentSyntaxHighlighting(fileRef);
+ }
+
+ @Override
+ @CheckForNull
+ public File readComponentCoverage(int fileRef) {
+ return delegate.readComponentCoverage(fileRef);
+ }
+
+ @Override
+ public File readFileSource(int fileRef) {
+ return delegate.readFileSource(fileRef);
+ }
+
+ @Override
+ @CheckForNull
+ public File readTests(int testFileRef) {
+ return delegate.readTests(testFileRef);
+ }
+
+ @Override
+ @CheckForNull
+ public File readCoverageDetails(int testFileRef) {
+ return delegate.readCoverageDetails(testFileRef);
+ }
+}
--- /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.batch;
+
+import javax.annotation.ParametersAreNonnullByDefault;
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.batch.BatchReportReader;
import org.sonar.server.computation.ComputationContext;
import static java.util.Objects.requireNonNull;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReport.Changesets.Changeset;
import org.sonar.batch.protocol.output.BatchReport.Changesets.Changeset.Builder;
-import org.sonar.batch.protocol.output.BatchReportReader;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.source.index.SourceLineDoc;
import org.sonar.server.source.index.SourceLineIndex;
import java.util.List;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.server.computation.ComputationContext;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.issue.IssueComputation;
public class ParseReportStep implements ComputationStep {
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.Scopes;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.util.NonNullInputFunction;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
package org.sonar.server.computation.step;
+import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReport.Range;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.measure.db.MeasureDto;
import org.sonar.core.metric.db.MetricDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
-import java.util.List;
-
/**
* Persist duplications into
*/
package org.sonar.server.computation.step;
+import java.util.List;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.event.EventDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
-import java.util.List;
-
public class PersistEventsStep implements ComputationStep {
private final DbClient dbClient;
package org.sonar.server.computation.step;
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
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.batch.BatchReportReader;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.source.ComputeFileSourceData;
import org.sonar.server.computation.source.CoverageLineReader;
import org.sonar.server.db.DbClient;
import org.sonar.server.source.db.FileSourceDb;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
public class PersistFileSourcesStep implements ComputationStep {
private final DbClient dbClient;
package org.sonar.server.computation.step;
import com.google.common.annotations.VisibleForTesting;
+import java.util.List;
+import javax.annotation.CheckForNull;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.rule.RuleKey;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.measure.db.MeasureDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.issue.RuleCache;
import org.sonar.server.computation.measure.MetricCache;
import org.sonar.server.db.DbClient;
-import javax.annotation.CheckForNull;
-
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
public class PersistMeasuresStep implements ComputationStep {
package org.sonar.server.computation.step;
+import java.util.Date;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.measure.db.MeasureDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.measure.MetricCache;
import org.sonar.server.db.DbClient;
import org.sonar.server.source.index.SourceLineIndex;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.Date;
-
import static com.google.common.base.Objects.firstNonNull;
import static com.google.common.base.Preconditions.checkState;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nullable;
import org.sonar.api.i18n.I18n;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.component.ComponentLinkDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
-import javax.annotation.Nullable;
-
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
import static com.google.common.collect.Sets.newHashSet;
/**
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Table;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
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.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor;
import org.sonar.server.source.db.FileSourceDb;
import org.sonar.server.source.db.FileSourceDb.Test.TestStatus;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
public class PersistTestsStep implements ComputationStep {
private static final Logger LOG = Loggers.get(PersistTestsStep.class);
import javax.annotation.Nullable;
import org.sonar.api.utils.internal.Uuids;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.ComponentKeys;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentImpl;
import org.sonar.server.db.DbClient;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.ComponentKeys;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.DepthTraversalTypeAwareVisitor;
import org.sonar.server.db.DbClient;
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, mock(LanguageRepository.class));
+ sut = new ComputationService(dbClient, steps, activityService, tempFolder, system, mock(LanguageRepository.class));
}
@Test
--- /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.batch;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.sonar.batch.protocol.output.BatchReport;
+
+public class BatchReportReaderRule implements TestRule, BatchReportReader {
+ private BatchReport.Metadata metadata;
+ private Map<Integer, List<BatchReport.Measure>> measures = new HashMap<>();
+ private Map<Integer, BatchReport.Changesets> changesets = new HashMap<>();
+ private Map<Integer, BatchReport.Component> components = new HashMap<>();
+ private Map<Integer, List<BatchReport.Issue>> issues = new HashMap<>();
+ private Map<Integer, BatchReport.Issues> deletedIssues = new HashMap<>();
+ private Map<Integer, List<BatchReport.Duplication>> duplications = new HashMap<>();
+ private Map<Integer, List<BatchReport.Symbols.Symbol>> symbols = new HashMap<>();
+ private Map<Integer, File> syntaxHighlightings = new HashMap<>();
+ private Map<Integer, File> coverages = new HashMap<>();
+ private Map<Integer, File> fileSources = new HashMap<>();
+ private Map<Integer, File> tests = new HashMap<>();
+ private Map<Integer, File> coverageDetails = new HashMap<>();
+
+ @Override
+ public Statement apply(final Statement statement, Description description) {
+ return new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ try {
+ statement.evaluate();
+ }
+ finally {
+ clear();
+ }
+ }
+ };
+ }
+
+ private void clear() {
+ this.metadata = null;
+ this.measures.clear();
+ this.changesets.clear();
+ this.components.clear();
+ this.issues.clear();
+ this.deletedIssues.clear();
+ this.duplications.clear();
+ this.symbols.clear();
+ this.syntaxHighlightings.clear();
+ this.coverages.clear();
+ this.fileSources.clear();
+ this.tests.clear();
+ this.coverageDetails.clear();
+ }
+
+ @Override
+ public BatchReport.Metadata readMetadata() {
+ if (metadata == null) {
+ throw new IllegalStateException("Metadata is missing");
+ }
+ return metadata;
+ }
+
+ public void setMetadata(BatchReport.Metadata metadata) {
+ this.metadata = metadata;
+ }
+
+ @Override
+ public List<BatchReport.Measure> readComponentMeasures(int componentRef) {
+ return measures.get(componentRef);
+ }
+
+ public void putMeasures(int componentRef, List<BatchReport.Measure> measures) {
+ this.measures.put(componentRef, measures);
+ }
+
+ @Override
+ public BatchReport.Changesets readChangesets(int componentRef) {
+ return changesets.get(componentRef);
+ }
+
+ public void putChangesets(BatchReport.Changesets changesets) {
+ this.changesets.put(changesets.getComponentRef(), changesets);
+ }
+
+ @Override
+ public BatchReport.Component readComponent(int componentRef) {
+ return components.get(componentRef);
+ }
+
+ public void putComponent(BatchReport.Component component) {
+ this.components.put(component.getRef(), component);
+ }
+
+ @Override
+ public List<BatchReport.Issue> readComponentIssues(int componentRef) {
+ return nonNull(issues.get(componentRef));
+ }
+
+ public void putIssues(int componentRef, List<BatchReport.Issue> issue) {
+ this.issues.put(componentRef, issue);
+ }
+
+ @Override
+ public BatchReport.Issues readDeletedComponentIssues(int deletedComponentRef) {
+ BatchReport.Issues issues = this.deletedIssues.get(deletedComponentRef);
+ if (issues == null) {
+ throw new IllegalStateException("Unable to issues for deleted component #" + deletedComponentRef);
+ }
+ return issues;
+ }
+
+ public void putDeletedIssues(int componentRef, BatchReport.Issues issues) {
+ this.deletedIssues.put(componentRef, issues);
+ }
+
+ @Override
+ public List<BatchReport.Duplication> readComponentDuplications(int componentRef) {
+ return nonNull(this.duplications.get(componentRef));
+ }
+
+ public void putDuplications(int componentRef, List<BatchReport.Duplication> duplications) {
+ this.duplications.put(componentRef, duplications);
+ }
+
+ @Override
+ public List<BatchReport.Symbols.Symbol> readComponentSymbols(int componentRef) {
+ return nonNull(this.symbols.get(componentRef));
+ }
+
+ private static <T> List<T> nonNull(@Nullable List<T> symbols) {
+ return symbols == null ? Collections.<T>emptyList() : symbols;
+ }
+
+ public void putSymbols(int componentRef, List<BatchReport.Symbols.Symbol> symbols) {
+ this.symbols.put(componentRef, symbols);
+ }
+
+ @Override
+ public boolean hasSyntaxHighlighting(int componentRef) {
+ File file = syntaxHighlightings.get(componentRef);
+ return file != null && file.exists();
+ }
+
+ @Override
+ public File readComponentSyntaxHighlighting(int fileRef) {
+ return syntaxHighlightings.get(fileRef);
+ }
+
+ public void putSyntaxHighlighting(int fileRef, File file) {
+ this.syntaxHighlightings.put(fileRef, file);
+ }
+
+ @Override
+ public File readComponentCoverage(int fileRef) {
+ return coverages.get(fileRef);
+ }
+
+ public void putCoverage(int fileRef, File file) {
+ this.coverages.put(fileRef, file);
+ }
+
+ @Override
+ public File readFileSource(int fileRef) {
+ File file = fileSources.get(fileRef);
+ if (file == null) {
+ throw new IllegalStateException("Unable to find source for file #" + fileRef + ". File does not exist: " + file);
+ }
+ return file;
+ }
+
+ public void putFileSoure(int fileRef, File file) {
+ this.fileSources.put(fileRef, file);
+ }
+
+ @Override
+ public File readTests(int testFileRef) {
+ return tests.get(testFileRef);
+ }
+
+ public void putTests(int testFileRed, File file) {
+ this.tests.put(testFileRed, file);
+ }
+
+ @Override
+ public File readCoverageDetails(int testFileRef) {
+ return coverageDetails.get(testFileRef);
+ }
+
+ public void putCoverageDetails(int testFileRef, File file) {
+ this.coverageDetails.put(testFileRef, file);
+ }
+}
*/
package org.sonar.server.computation.issue;
+import java.util.Date;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
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.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.es.EsTester;
import org.sonar.server.source.index.SourceLineDoc;
import org.sonar.server.source.index.SourceLineIndex;
import org.sonar.server.source.index.SourceLineIndexDefinition;
import org.sonar.test.DbTests;
-import java.io.File;
-import java.util.Date;
-
import static org.assertj.core.api.Assertions.assertThat;
@Category(DbTests.class)
@ClassRule
public static EsTester esTester = new EsTester().addDefinitions(new SourceLineIndexDefinition(new Settings()));
@Rule
- public TemporaryFolder temp = new TemporaryFolder();
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
- File dir;
SourceLinesCache sut;
@Before
public void setUp() throws Exception {
esTester.truncateIndices();
- dir = temp.newFolder();
sut = new SourceLinesCache(new SourceLineIndex(esTester.client()));
}
@Test
public void line_author_from_report() {
- BatchReportWriter reportWriter = new BatchReportWriter(dir);
- reportWriter.writeComponentChangesets(BatchReport.Changesets.newBuilder()
+ reportReader.putChangesets(BatchReport.Changesets.newBuilder()
.setComponentRef(123_456_789)
.addChangeset(newChangeset("charb", "123-456-789", 123_456_789L))
.addChangeset(newChangeset("wolinski", "987-654-321", 987_654_321L))
.addChangesetIndexByLine(1)
.build());
- sut.init("ANY_UUID", 123_456_789, new BatchReportReader(dir));
+ sut.init("ANY_UUID", 123_456_789, reportReader);
assertThat(sut.lineAuthor(1)).isEqualTo("charb");
assertThat(sut.lineAuthor(2)).isEqualTo("charb");
newSourceLine("cabu", "123-456-789", 123_456_789, 5)
);
- sut.init("DEFAULT_UUID", 123, new BatchReportReader(dir));
+ sut.init("DEFAULT_UUID", 123, reportReader);
assertThat(sut.lineAuthor(1)).isEqualTo("cabu");
assertThat(sut.lineAuthor(2)).isEqualTo("cabu");
@Test(expected = IllegalStateException.class)
public void fail_when_component_ref_is_not_filled() {
- sut.init("ANY_UUID", null, new BatchReportReader(dir));
+ sut.init("ANY_UUID", null, reportReader);
sut.lineAuthor(0);
}
*/
package org.sonar.server.computation.step;
-import java.io.File;
-import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.elasticsearch.search.SearchHit;
import org.junit.Rule;
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.security.DefaultGroups;
import org.sonar.api.utils.System2;
import org.sonar.api.web.UserRole;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.permission.PermissionFacade;
import org.sonar.core.permission.PermissionTemplateDao;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
private static final String PROJECT_KEY = "PROJECT_KEY";
private static final String PROJECT_UUID = "PROJECT_UUID";
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
@ClassRule
public static EsTester esTester = new EsTester().addDefinitions(new IssueIndexDefinition(new Settings()));
-
@ClassRule
public static DbTester dbTester = new DbTester();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
DbSession dbSession;
step = new ApplyPermissionsStep(dbClient, dbComponentsRefCache, issueAuthorizationIndexer, new PermissionFacade(roleDao, null,
new ResourceDao(dbTester.myBatis(), System2.INSTANCE), permissionTemplateDao, settings));
+
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder() .build());
}
@After
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(projectDto.getId(), PROJECT_KEY, PROJECT_UUID));
Component project = new DumbComponent(Component.Type.PROJECT, 1, PROJECT_KEY, PROJECT_UUID);
- step.execute(new ComputationContext(createDumbBatchReportReader(), null, null, null, ComponentTreeBuilders.from(project), null));
+ step.execute(new ComputationContext(reportReader, null, null, null, ComponentTreeBuilders.from(project), null));
dbSession.commit();
assertThat(dbClient.componentDao().selectByKey(dbSession, PROJECT_KEY).getAuthorizationUpdatedAt()).isNotNull();
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(projectDto.getId(), PROJECT_KEY, PROJECT_UUID));
Component project = new DumbComponent(Component.Type.PROJECT, 1, PROJECT_KEY, PROJECT_UUID);
- step.execute(new ComputationContext(createDumbBatchReportReader(), null, null, null, ComponentTreeBuilders.from(project), null));
+ step.execute(new ComputationContext(reportReader, null, null, null, ComponentTreeBuilders.from(project), null));
dbSession.commit();
// Check that authorization updated at has not been changed -> Nothing has been done
assertThat(projectDto.getAuthorizationUpdatedAt()).isEqualTo(authorizationUpdatedAt);
}
- private BatchReportReader createDumbBatchReportReader() throws IOException {
- File dir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(dir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
- .build());
- return new BatchReportReader(dir);
- }
-
@Override
protected ComputationStep step() {
return step;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.resource.ResourceIndexerDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.FileBatchReportReader;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DbComponentsRefCache.DbComponent;
import org.sonar.server.computation.component.ComponentTreeBuilders;
ComponentDto project = mock(ComponentDto.class);
when(project.getId()).thenReturn(123L);
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(), mock(DbClient.class), ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class));
+ ComputationContext context = new ComputationContext(new FileBatchReportReader(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.io.File;
import java.sql.Connection;
import java.util.List;
import org.elasticsearch.search.SearchHit;
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.DbComponentsRefCache;
+import org.sonar.server.computation.batch.FileBatchReportReader;
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.source.index.SourceLineIndexDefinition;
import org.sonar.server.source.index.SourceLineIndexer;
-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;
.setRootComponentRef(1)
.build());
- step().execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(), dbClient,
+ step().execute(new ComputationContext(new FileBatchReportReader(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);
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.FileBatchReportReader;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DumbComponent;
.setRootComponentRef(1)
.build());
- step().execute(new ComputationContext(new BatchReportReader(reportDir), "PROJECT_KEY", new Settings(), dbClient,
+ step().execute(new ComputationContext(new FileBatchReportReader(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);
*/
package org.sonar.server.computation.step;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
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.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
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;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@Rule
public TemporaryFolder temp = new TemporaryFolder();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
@ClassRule
public static DbTester dbTester = new DbTester();
new DumbComponent(Component.Type.FILE, 2, "FILE1_UUID", "PROJECT_KEY:file1"),
new DumbComponent(Component.Type.FILE, 3, "FILE2_UUID", "PROJECT_KEY:file2"));
- File reportDir = generateReport();
+ generateReport();
+
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, new Settings(),
+ mock(DbClient.class), ComponentTreeBuilders.from(root), mock(LanguageRepository.class));
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(),
- mock(DbClient.class), ComponentTreeBuilders.from(root), mock(LanguageRepository.class));
sut.execute(context);
assertThat(context.getReportMetadata().getRootComponentRef()).isEqualTo(1);
verify(issueComputation).afterReportProcessing();
}
- private File generateReport() throws IOException {
- File dir = temp.newFolder();
+ private void generateReport() throws IOException {
// project and 2 files
- BatchReportWriter writer = new BatchReportWriter(dir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setDeletedComponentsCount(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.addChildRef(2)
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.FILE)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.FILE)
.build());
// deleted components
- writer.writeDeletedComponentIssues(1, "DELETED_UUID", ISSUES_ON_DELETED_COMPONENT);
- return dir;
+ BatchReport.Issues.Builder issuesBuilder = BatchReport.Issues.newBuilder();
+ issuesBuilder.setComponentRef(1);
+ issuesBuilder.setComponentUuid("DELETED_UUID");
+ issuesBuilder.addAllIssue(ISSUES_ON_DELETED_COMPONENT);
+ reportReader.putDeletedIssues(1, issuesBuilder.build());
}
@Override
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.Rule;
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.batch.protocol.output.BatchReportWriter;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
@ClassRule
public static DbTester dbTester = new DbTester();
-
@Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- File reportDir;
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
DbSession session;
session = dbTester.myBatis().openSession(false);
dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao());
- reportDir = temp.newFolder();
-
projectSettings = new Settings();
languageRepository = mock(LanguageRepository.class);
dbComponentsRefCache = new DbComponentsRefCache();
@Test
public void persist_components() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setDescription("Project description")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.setDescription("Module description")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir",
new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java"))));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
@Test
public void persist_file_directly_attached_on_root_directory() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("/")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.FILE)
.setPath("pom.xml")
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.DIRECTORY, 2, "CDEF", PROJECT_KEY + ":/",
new DumbComponent(Component.Type.FILE, 3, "DEFG", PROJECT_KEY + ":pom.xml")));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:/");
@Test
public void persist_unit_test() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/test/java/dir")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.FILE)
.setPath("src/test/java/dir/FooTest.java")
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.DIRECTORY, 2, "CDEF", PROJECT_KEY + ":src/test/java/dir",
new DumbComponent(Component.Type.FILE, 3, "DEFG", PROJECT_KEY + ":src/test/java/dir/FooTest.java")));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
ComponentDto file = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY + ":src/test/java/dir/FooTest.java");
dbClient.componentDao().insert(session, module);
session.commit();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.setName("Module")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir",
new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java"))));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
@Test
public void compute_parent_project_id() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.setName("Module")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.MODULE)
.setKey("SUB_MODULE_1_KEY")
.setName("Sub Module 1")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.MODULE)
.setKey("SUB_MODULE_2_KEY")
.setName("Sub Module 2")
.addChildRef(5)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(5)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
new DumbComponent(Component.Type.MODULE, 3, "CDEF", "SUB_MODULE_1_KEY",
new DumbComponent(Component.Type.MODULE, 4, "DEFG", "SUB_MODULE_2_KEY",
new DumbComponent(Component.Type.DIRECTORY, 5, "EFGH", "SUB_MODULE_2_KEY:src/main/java/dir")))));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
@Test
public void persist_multi_modules() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_A")
.setName("Module A")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.MODULE)
.setKey("SUB_MODULE_A")
.setName("Sub Module A")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_B")
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_A",
new DumbComponent(Component.Type.MODULE, 3, "DEFG", "SUB_MODULE_A")),
new DumbComponent(Component.Type.MODULE, 4, "CDEF", "MODULE_B"));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
dbClient.componentDao().insert(session, directory, file);
session.commit();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.setName("Module")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir",
new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java"))));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
dbClient.componentDao().insert(session, module);
session.commit();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("New project name")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY"));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
dbClient.componentDao().insert(session, module);
session.commit();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setDescription("New project description")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY"));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
dbClient.componentDao().insert(session, module);
session.commit();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY"));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
dbClient.componentDao().insert(session, directory, file);
session.commit();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_A")
.addChildRef(3)
.build());
// Module B is now a sub module of module A
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_B")
.setName("Module B")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(5)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(5)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
new DumbComponent(Component.Type.MODULE, 3, "BCDE", "MODULE_B",
new DumbComponent(Component.Type.DIRECTORY, 4, "CDEF", "MODULE_B:src/main/java/dir",
new DumbComponent(Component.Type.FILE, 5, "DEFG", "MODULE_B:src/main/java/dir/Foo.java")))));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
package org.sonar.server.computation.step;
+import java.util.Map;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
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;
import org.sonar.batch.protocol.output.BatchReport.Range;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.metric.db.MetricDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
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.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.db.DbClient;
import org.sonar.server.measure.persistence.MeasureDao;
import org.sonar.server.metric.persistence.MetricDao;
import org.sonar.test.DbTests;
-import java.io.File;
-import java.util.Map;
-
import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
private static final String PROJECT_KEY = "PROJECT_KEY";
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- File reportDir;
-
@ClassRule
public static DbTester dbTester = new DbTester();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+
DbSession session;
DbClient dbClient;
session = dbTester.myBatis().openSession(false);
dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new MeasureDao(), new MetricDao());
- reportDir = temp.newFolder();
-
projectSettings = new Settings();
dbComponentsRefCache = new DbComponentsRefCache();
languageRepository = mock(LanguageRepository.class);
saveDuplicationMetric();
initReportWithProjectAndFile();
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(0);
public void persist_duplications_on_same_file() {
MetricDto duplicationMetric = saveDuplicationMetric();
- BatchReportWriter writer = initReportWithProjectAndFile();
+ initReportWithProjectAndFile();
BatchReport.Duplication duplication = BatchReport.Duplication.newBuilder()
.setOriginPosition(Range.newBuilder()
.build())
.build())
.build();
- writer.writeComponentDuplications(2, newArrayList(duplication));
+ reportReader.putDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
saveDuplicationMetric();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setSnapshotId(10L)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.setSnapshotId(11L)
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.FILE)
.setSnapshotId(12L)
.build())
.build())
.build();
- writer.writeComponentDuplications(3, newArrayList(duplication));
+ reportReader.putDuplications(3, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
saveDuplicationMetric();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setSnapshotId(10L)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.DIRECTORY)
.setSnapshotId(11L)
.addChildRef(3)
.setPath("dir")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.FILE)
.setSnapshotId(12L)
.build())
.build())
.build();
- writer.writeComponentDuplications(3, newArrayList(duplication));
+ reportReader.putDuplications(3, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
saveDuplicationMetric();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setSnapshotId(10L)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.DIRECTORY)
.setSnapshotId(11L)
.addChildRef(3)
.setPath("dir")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setSnapshotId(12L)
.addChildRef(10)
.setPath("dir2")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(10)
.setType(Constants.ComponentType.FILE)
.setSnapshotId(20L)
.build())
.build())
.build();
- writer.writeComponentDuplications(10, newArrayList(duplication));
+ reportReader.putDuplications(10, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
public void persist_duplications_on_different_files() {
dbComponentsRefCache.addComponent(3, new DbComponent(3L, "PROJECT_KEY:file2", "CDEF"));
saveDuplicationMetric();
- BatchReportWriter writer = initReportWithProjectAndFile();
+ initReportWithProjectAndFile();
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.FILE)
.setSnapshotId(12L)
.build())
.build())
.build();
- writer.writeComponentDuplications(2, newArrayList(duplication));
+ reportReader.putDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
@Test
public void persist_duplications_on_different_projects() {
saveDuplicationMetric();
- BatchReportWriter writer = initReportWithProjectAndFile();
+ initReportWithProjectAndFile();
BatchReport.Duplication duplication = BatchReport.Duplication.newBuilder()
.setOriginPosition(Range.newBuilder()
.build())
.build())
.build();
- writer.writeComponentDuplications(2, newArrayList(duplication));
+ reportReader.putDuplications(2, newArrayList(duplication));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_measures")).isEqualTo(1);
assertThat(dto.get("textValue")).isEqualTo("<duplications><g><b s=\"1\" l=\"5\" r=\"PROJECT_KEY:file\"/><b s=\"6\" l=\"5\" r=\"PROJECT2_KEY:file2\"/></g></duplications>");
}
- private BatchReportWriter initReportWithProjectAndFile() {
+ private void initReportWithProjectAndFile() {
dbComponentsRefCache.addComponent(1, new DbComponent(1L, PROJECT_KEY, "ABCD"));
dbComponentsRefCache.addComponent(2, new DbComponent(2L, "PROJECT_KEY:file", "BCDE"));
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setSnapshotId(10L)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.FILE)
.setSnapshotId(11L)
.setPath("file")
.build());
-
- return writer;
}
private MetricDto saveDuplicationMetric() {
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.Rule;
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.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
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.computation.component.DumbComponent;
+import org.sonar.server.computation.language.LanguageRepository;
import org.sonar.server.db.DbClient;
import org.sonar.server.event.db.EventDao;
import org.sonar.test.DbTests;
public class PersistEventsStepTest extends BaseStepTest {
private static final String PROJECT_KEY = "PROJECT_KEY";
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
@ClassRule
public static DbTester dbTester = new DbTester();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
DbSession session;
DbClient dbClient;
dbComponentsRefCache.addComponent(1, new DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.setAnalysisDate(150000000L)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "nothing_to_do_when_no_events_in_report.xml", "events");
}
dbComponentsRefCache.addComponent(1, new DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.setAnalysisDate(150000000L)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setSnapshotId(1000L)
)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "add_events-result.xml", "events");
}
dbComponentsRefCache.addComponent(1, new DbComponent(1L, PROJECT_KEY, "ABCD"));
dbComponentsRefCache.addComponent(2, new DbComponent(2L, "MODULE_KEY", "BCDE"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.setAnalysisDate(150000000L)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setSnapshotId(1000L)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setSnapshotId(1001L)
.addEvent(BatchReport.Event.newBuilder()
- .setName("Red (was Orange)")
- .setCategory(Constants.EventCategory.ALERT)
- .setDescription("Open issues > 0")
- .build()
+ .setName("Red (was Orange)")
+ .setCategory(Constants.EventCategory.ALERT)
+ .setDescription("Open issues > 0")
+ .build()
).build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "persist_report_events_with_component_children-result.xml", "events");
}
dbComponentsRefCache.addComponent(1, new DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.setAnalysisDate(150000000L)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setSnapshotId(1000L)
.setVersion("1.0")
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "add_version_event-result.xml", "events");
}
dbComponentsRefCache.addComponent(1, new DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.setAnalysisDate(150000000L)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setSnapshotId(1001L)
.setVersion("1.5-SNAPSHOT")
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "keep_one_event_by_version-result.xml", "events");
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.batch.protocol.output.FileStructure;
import org.sonar.core.persistence.DbSession;
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.batch.BatchReportReaderRule;
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.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
import org.sonar.server.source.db.FileSourceDao;
import org.sonar.server.source.db.FileSourceDb;
private static final String PROJECT_KEY = "PROJECT_KEY";
private static final String FILE_UUID = "FILE";
+ @ClassRule
+ public static DbTester dbTester = new DbTester();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+
@Rule
public TemporaryFolder temp = new TemporaryFolder();
File reportDir;
- @ClassRule
- public static DbTester dbTester = new DbTester();
-
DbSession session;
DbClient dbClient;
public void persist_sources() throws Exception {
initBasicReport(2);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders .from(DumbComponent.DUMB_PROJECT), new EmptyLanguageRepository()));
+ sut.execute(new ComputationContext(reportReader, 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);
dbComponentsRefCache.addComponent(FILE_REF, new DbComponentsRefCache.DbComponent(2L, "PROJECT_KEY:file", FILE_UUID));
BatchReportWriter writer = new BatchReportWriter(reportDir);
- FileUtils.writeLines(writer.getFileStructure().fileFor(FileStructure.Domain.SOURCE, FILE_REF), Lists.newArrayList("line1", "line2"));
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.addChildRef(FILE_REF)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(FILE_REF)
.setType(Constants.ComponentType.FILE)
// Lines is set to 3 but only 2 lines are read from the file -> the last lines should be added
.setLines(3)
.build());
+ File file = writer.getFileStructure().fileFor(FileStructure.Domain.SOURCE, FILE_REF);
+ reportReader.putFileSoure(FILE_REF, file);
+ FileUtils.writeLines(file, Lists.newArrayList("line1", "line2"));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, 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,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource("FILE");
public void persist_coverage() throws Exception {
BatchReportWriter writer = initBasicReport(1);
- writer.writeComponentCoverage(FILE_REF, newArrayList(BatchReport.Coverage.newBuilder()
+ File file = writer.writeComponentCoverage(FILE_REF, newArrayList(BatchReport.Coverage.newBuilder()
.setLine(1)
.setConditions(10)
.setUtHits(true)
.setItCoveredConditions(3)
.setOverallCoveredConditions(4)
.build()));
+ reportReader.putCoverage(FILE_REF, file);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
@Test
public void persist_scm() throws Exception {
- BatchReportWriter writer = initBasicReport(1);
+ initBasicReport(1);
- writer.writeComponentChangesets(BatchReport.Changesets.newBuilder()
+ reportReader.putChangesets(BatchReport.Changesets.newBuilder()
.setComponentRef(FILE_REF)
.addChangeset(BatchReport.Changesets.Changeset.newBuilder()
.setAuthor("john")
.addChangesetIndexByLine(0)
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, 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_highlighting() throws Exception {
BatchReportWriter writer = initBasicReport(1);
- writer.writeComponentSyntaxHighlighting(FILE_REF, newArrayList(BatchReport.SyntaxHighlighting.newBuilder()
+ File file = writer.writeComponentSyntaxHighlighting(FILE_REF, newArrayList(BatchReport.SyntaxHighlighting.newBuilder()
.setRange(BatchReport.Range.newBuilder()
.setStartLine(1).setEndLine(1)
.setStartOffset(2).setEndOffset(4)
.setType(Constants.HighlightingType.ANNOTATION)
.build()
));
+ reportReader.putSyntaxHighlighting(FILE_REF, file);
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
@Test
public void persist_symbols() throws Exception {
- BatchReportWriter writer = initBasicReport(3);
+ initBasicReport(3);
- writer.writeComponentSymbols(FILE_REF, newArrayList(
+ reportReader.putSymbols(FILE_REF, newArrayList(
BatchReport.Symbols.Symbol.newBuilder()
.setDeclaration(BatchReport.Range.newBuilder()
.setStartLine(1).setEndLine(1).setStartOffset(2).setEndOffset(4)
).build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1);
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID);
@Test
public void persist_duplication() throws Exception {
- BatchReportWriter writer = initBasicReport(1);
+ initBasicReport(1);
- writer.writeComponentDuplications(FILE_REF, newArrayList(
+ reportReader.putDuplications(FILE_REF, newArrayList(
BatchReport.Duplication.newBuilder()
.setOriginPosition(BatchReport.Range.newBuilder()
.setStartLine(1)
.build()
));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, 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,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, 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,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, 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,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, 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 display_file_path_when_exception_is_generated() throws Exception {
BatchReportWriter writer = initBasicReport(1);
- writer.writeComponentSyntaxHighlighting(FILE_REF, newArrayList(BatchReport.SyntaxHighlighting.newBuilder()
+ File file = writer.writeComponentSyntaxHighlighting(FILE_REF, newArrayList(BatchReport.SyntaxHighlighting.newBuilder()
.setRange(BatchReport.Range.newBuilder()
.setStartLine(1).setEndLine(1)
// Wrong offset -> fail
.setType(Constants.HighlightingType.ANNOTATION)
.build()
));
+ reportReader.putSyntaxHighlighting(FILE_REF, file);
try {
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
failBecauseExceptionWasNotThrown(IllegalStateException.class);
} catch (IllegalStateException e) {
assertThat(e).hasMessage("Cannot persist sources of src/Foo.java").hasCauseInstanceOf(IllegalArgumentException.class);
dbComponentsRefCache.addComponent(2, new DbComponentsRefCache.DbComponent(2L, "MODULE_KEY", "MODULE"));
dbComponentsRefCache.addComponent(FILE_REF, new DbComponentsRefCache.DbComponent(3L, "MODULE_KEY:src/Foo.java", FILE_UUID));
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.addChildRef(FILE_REF)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(FILE_REF)
.setType(Constants.ComponentType.FILE)
.setPath("src/Foo.java")
.setLines(numberOfLines)
.build());
+ BatchReportWriter writer = new BatchReportWriter(reportDir);
List<String> lines = newArrayList();
for (int i = 1; i <= numberOfLines; i++) {
lines.add("line" + i);
}
- FileUtils.writeLines(writer.getSourceFile(FILE_REF), lines);
+ File file = writer.getSourceFile(FILE_REF);
+ FileUtils.writeLines(file, lines);
+ reportReader.putFileSoure(FILE_REF, file);
return writer;
}
package org.sonar.server.computation.step;
-import java.io.File;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.junit.Rule;
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.rule.RuleKey;
import org.sonar.api.rule.Severity;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.Constants.MeasureValueType;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.measure.db.MeasureDto;
import org.sonar.core.metric.db.MetricDto;
import org.sonar.core.rule.RuleDto;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DumbComponent;
DbSession session;
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
@ClassRule
public static DbTester dbTester = new DbTester();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+
DbClient dbClient;
RuleCache ruleCache;
MetricCache metricCache;
ComponentDto project = addComponent(1, "project-key");
ComponentDto file = addComponent(2, "file-key");
- File dir = temp.newFolder();
- BatchReportWriter report = new BatchReportWriter(dir);
-
- report.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setAnalysisDate(new Date().getTime())
.setRootComponentRef(1)
.setProjectKey("project-key")
.setSnapshotId(3)
.build());
- report.writeComponent(defaultComponent()
+ reportReader.putComponent(defaultComponent()
.addChildRef(2)
.build());
- report.writeComponent(
+ reportReader.putComponent(
defaultComponent()
.setRef(2)
.build());
- report.writeComponentMeasures(1, Arrays.asList(
+ reportReader.putMeasures(1, Arrays.asList(
BatchReport.Measure.newBuilder()
.setValueType(MeasureValueType.STRING)
.setStringValue("measure-data")
.setCharactericId(123456)
.build()));
- report.writeComponentMeasures(2, Arrays.asList(
+ reportReader.putMeasures(2, Arrays.asList(
BatchReport.Measure.newBuilder()
.setValueType(MeasureValueType.DOUBLE)
.setDoubleValue(123.123d)
.setCharactericId(123456)
.build()));
- sut.execute(new ComputationContext(new BatchReportReader(dir), PROJECT_KEY, new Settings(),
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, new Settings(),
dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class)));
session.commit();
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.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.metric.db.MetricDto;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.computation.ComputationContext;
-import org.sonar.server.computation.component.DbComponentsRefCache;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
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.computation.measure.MetricCache;
@ClassRule
public static DbTester db = new DbTester();
@Rule
- public TemporaryFolder temp = new TemporaryFolder();
- File dir;
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
PersistNumberOfDaysSinceLastCommitStep sut;
languageRepository = mock(LanguageRepository.class);
when(metricCache.get(anyString())).thenReturn(new MetricDto().setId(10));
dbComponentsRefCache = new DbComponentsRefCache();
- dir = temp.newFolder();
sut = new PersistNumberOfDaysSinceLastCommitStep(System2.INSTANCE, dbClient, sourceLineIndex, metricCache, dbComponentsRefCache);
}
@Test
public void persist_number_of_days_since_last_commit_from_report() {
long threeDaysAgo = DateUtils.addDays(new Date(), -3).getTime();
- BatchReportWriter reportWriter = initReportWithProjectAndFile();
- reportWriter.writeComponentChangesets(
+ initReportWithProjectAndFile();
+ reportReader.putChangesets(
BatchReport.Changesets.newBuilder()
.setComponentRef(2)
.addChangeset(
)
.build()
);
- ComputationContext context = new ComputationContext(new BatchReportReader(dir), "PROJECT_KEY", projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, "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, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, "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, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, "PROJECT_KEY", projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT),
+ languageRepository);
sut.execute(context);
db.assertDbUnit(getClass(), "empty.xml");
}
- private BatchReportWriter initReportWithProjectAndFile() {
+ private void initReportWithProjectAndFile() {
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, "PROJECT_KEY", "project-uuid"));
dbComponentsRefCache.addComponent(2, new DbComponentsRefCache.DbComponent(2L, "PROJECT_KEY:file", "file-uuid"));
- BatchReportWriter writer = new BatchReportWriter(dir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setSnapshotId(1000)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey("PROJECT_KEY")
.setSnapshotId(10L)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.FILE)
.setSnapshotId(11L)
.build());
-
- return writer;
}
}
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.Rule;
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.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.component.db.ComponentLinkDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
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.computation.component.DbComponentsRefCache;
import org.sonar.server.db.DbClient;
import org.sonar.test.DbTests;
private static final String PROJECT_KEY = "PROJECT_KEY";
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
@ClassRule
public static DbTester dbTester = new DbTester();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+
DbSession session;
DbClient dbClient;
Settings projectSettings;
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, "ABCD"));
dbComponentsRefCache.addComponent(2, new DbComponentsRefCache.DbComponent(2L, "MODULE_KEY", "BCDE"));
- File reportDir = temp.newFolder();
// project and 1 module
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.setAnalysisDate(150000000L)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.addChildRef(2)
.addLink(BatchReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.ISSUE).setHref("http://jira.sonarsource.com/").build())
.addLink(BatchReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.CI).setHref("http://bamboo.ci.codehaus.org/browse/SONAR").build())
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.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, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "add_links_on_project_and_module-result.xml", "project_links");
}
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.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, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "nothing_to_do_when_link_already_exists.xml", "project_links");
}
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.FILE)
.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, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_links")).isEqualTo(0);
}
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.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, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "update_link-result.xml", "project_links");
}
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
assertThat(dbTester.countRowsOfTable("project_links")).isEqualTo(0);
}
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.build());
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
dbTester.assertDbUnit(getClass(), "not_delete_custom_link.xml", "project_links");
}
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, "ABCD"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.addLink(BatchReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
try {
- step.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), languageRepository));
+ step.execute(new ComputationContext(reportReader, 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.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReport.CoverageDetail;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.core.persistence.MyBatis;
import org.sonar.core.source.db.FileSourceDto;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
private static final String TEST_FILE_PATH_1 = "TEST-PATH-1";
private static final String TEST_FILE_PATH_2 = "TEST-PATH-2";
+ @ClassRule
+ public static DbTester db = new DbTester();
+
@Rule
public TemporaryFolder temp = new TemporaryFolder();
- @ClassRule
- public static DbTester db = new DbTester();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
@Rule
public LogTester log = new LogTester();
@Test
public void no_test_in_database_and_batch_report() {
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1)).isNull();
assertThat(log.logs()).isEmpty();
List<BatchReport.Test> batchTests = Arrays.asList(
newTest(1), newTest(2)
);
- writer.writeTests(TEST_FILE_REF_1, batchTests);
+ reportReader.putTests(TEST_FILE_REF_1, writer.writeTests(TEST_FILE_REF_1, batchTests));
List<CoverageDetail> coverageDetails = Arrays.asList(
newCoverageDetail(1, MAIN_FILE_REF_1)
);
- writer.writeCoverageDetails(TEST_FILE_REF_1, coverageDetails);
+ reportReader.putCoverageDetails(TEST_FILE_REF_1, writer.writeCoverageDetails(TEST_FILE_REF_1, coverageDetails));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
assertThat(db.countRowsOfTable("file_sources")).isEqualTo(1);
@Test
public void insert_all_data_of_a_test() {
BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeTests(TEST_FILE_REF_1, Arrays.asList(newTest(1)));
- writer.writeCoverageDetails(TEST_FILE_REF_1, Arrays.asList(newCoverageDetail(1, MAIN_FILE_REF_1)));
+ reportReader.putTests(TEST_FILE_REF_1, writer.writeTests(TEST_FILE_REF_1, Arrays.asList(newTest(1))));
+ reportReader.putCoverageDetails(TEST_FILE_REF_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, dbClient, ComponentTreeBuilders.from(root), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
assertThat(dto.getCreatedAt()).isEqualTo(now);
public void insert_tests_without_coverage_details() {
BatchReportWriter writer = new BatchReportWriter(reportDir);
List<BatchReport.Test> batchTests = Arrays.asList(newTest(1));
- writer.writeTests(TEST_FILE_REF_1, batchTests);
+ reportReader.putTests(TEST_FILE_REF_1, writer.writeTests(TEST_FILE_REF_1, batchTests));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
assertThat(dto.getFileUuid()).isEqualTo(TEST_FILE_UUID_1);
public void insert_coverage_details_not_taken_into_account() {
BatchReportWriter writer = new BatchReportWriter(reportDir);
List<BatchReport.Test> batchTests = Arrays.asList(newTest(1));
- writer.writeTests(TEST_FILE_REF_1, batchTests);
+ reportReader.putTests(TEST_FILE_REF_1, writer.writeTests(TEST_FILE_REF_1, batchTests));
List<CoverageDetail> coverageDetails = Arrays.asList(newCoverageDetail(1, MAIN_FILE_REF_1), newCoverageDetail(2, MAIN_FILE_REF_2));
- writer.writeCoverageDetails(TEST_FILE_REF_1, coverageDetails);
- writer.writeCoverageDetails(TEST_FILE_REF_2, coverageDetails);
+ reportReader.putCoverageDetails(TEST_FILE_REF_1, writer.writeCoverageDetails(TEST_FILE_REF_1, coverageDetails));
+ reportReader.putCoverageDetails(TEST_FILE_REF_2, writer.writeCoverageDetails(TEST_FILE_REF_2, coverageDetails));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), 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'");
@Test
public void aggregate_coverage_details() {
BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeTests(TEST_FILE_REF_1, Arrays.asList(newTest(1)));
- writer.writeCoverageDetails(TEST_FILE_REF_1, Arrays.asList(
+ reportReader.putTests(TEST_FILE_REF_1, writer.writeTests(TEST_FILE_REF_1, Arrays.asList(newTest(1))));
+ reportReader.putCoverageDetails(TEST_FILE_REF_1, writer.writeCoverageDetails(TEST_FILE_REF_1, Arrays.asList(
newCoverageDetailWithLines(1, MAIN_FILE_REF_1, 1, 3),
- newCoverageDetailWithLines(1, MAIN_FILE_REF_1, 2, 4)));
+ newCoverageDetailWithLines(1, MAIN_FILE_REF_1, 2, 4))));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
List<Integer> coveredLines = dto.getTestData().get(0).getCoveredFile(0).getCoveredLineList();
BatchReportWriter writer = new BatchReportWriter(reportDir);
BatchReport.Test newBatchTest = newTest(1);
- writer.writeTests(TEST_FILE_REF_1, Arrays.asList(newBatchTest));
+ reportReader.putTests(TEST_FILE_REF_1, writer.writeTests(TEST_FILE_REF_1, Arrays.asList(newBatchTest)));
CoverageDetail newCoverageDetail = newCoverageDetail(1, MAIN_FILE_REF_1);
- writer.writeCoverageDetails(TEST_FILE_REF_1, Arrays.asList(newCoverageDetail));
+ reportReader.putCoverageDetails(TEST_FILE_REF_1, writer.writeCoverageDetails(TEST_FILE_REF_1, Arrays.asList(newCoverageDetail)));
// ACT
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
+ sut.execute(new ComputationContext(reportReader, PROJECT_KEY, projectSettings, dbClient, ComponentTreeBuilders.from(root), languageRepository));
// ASSERT
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1);
.build();
}
- private BatchReportWriter initBasicReport() {
+ private void initBasicReport() {
dbComponentsRefCache.addComponent(1, new DbComponent(1L, "PROJECT_KEY", PROJECT_UUID));
dbComponentsRefCache.addComponent(2, new DbComponent(2L, "MODULE_KEY", "MODULE"));
dbComponentsRefCache.addComponent(3, new DbComponent(3L, "TEST_FILE1_KEY", TEST_FILE_UUID_1));
dbComponentsRefCache.addComponent(5, new DbComponent(5L, "MAIN_FILE1_KEY", MAIN_FILE_UUID_1));
dbComponentsRefCache.addComponent(6, new DbComponent(6L, "MAIN_FILE2_KEY", MAIN_FILE_UUID_2));
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setProjectKey(PROJECT_KEY)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.addAllChildRef(Arrays.asList(TEST_FILE_REF_1, TEST_FILE_REF_2, MAIN_FILE_REF_1, MAIN_FILE_REF_2))
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(TEST_FILE_REF_1)
.setIsTest(true)
.setType(Constants.ComponentType.FILE)
.setPath(TEST_FILE_PATH_1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(TEST_FILE_REF_2)
.setIsTest(true)
.setType(Constants.ComponentType.FILE)
.setPath(TEST_FILE_PATH_2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(MAIN_FILE_REF_1)
.setType(Constants.ComponentType.FILE)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(MAIN_FILE_REF_2)
.setType(Constants.ComponentType.FILE)
.build());
-
- return writer;
}
}
package org.sonar.server.computation.step;
-import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.junit.After;
import org.junit.Rule;
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.batch.protocol.output.BatchReportWriter;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.language.LanguageRepository;
@ClassRule
public static DbTester dbTester = new DbTester();
-
@Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- File reportDir;
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
DbSession session;
session = dbTester.myBatis().openSession(false);
dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao());
- reportDir = temp.newFolder();
-
projectSettings = new Settings();
sut = new PopulateComponentsUuidAndKeyStep(dbClient);
}
@Test
public void compute_keys_and_uuids() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
.build());
- BatchReportReader batchReportReader = new BatchReportReader(reportDir);
- ComputationContext context = new ComputationContext(batchReportReader, PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(batchReportReader), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(reportReader), languageRepository);
sut.execute(context);
Map<Integer, Component> componentsByRef = getComponentsByRef(context.getRoot());
dbClient.componentDao().insert(session, directory, file);
session.commit();
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
.build());
- BatchReportReader batchReportReader = new BatchReportReader(reportDir);
- ComputationContext context = new ComputationContext(batchReportReader, PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(batchReportReader), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(reportReader), languageRepository);
sut.execute(context);
Map<Integer, Component> componentsByRef = getComponentsByRef(context.getRoot());
@Test
public void use_latest_module_for_files_key() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.setName("Module")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.MODULE)
.setKey("SUB_MODULE_KEY")
.setName("Sub Module")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(5)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(5)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
.build());
- BatchReportReader batchReportReader = new BatchReportReader(reportDir);
- ComputationContext context = new ComputationContext(batchReportReader, PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(batchReportReader), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(reportReader), languageRepository);
sut.execute(context);
Map<Integer, Component> componentsByRef = getComponentsByRef(context.getRoot());
@Test
public void use_branch_to_generate_keys() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.setBranch("origin/master")
.setProjectKey("")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.setName("Project")
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.setName("Module")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
.build());
- BatchReportReader batchReportReader = new BatchReportReader(reportDir);
- ComputationContext context = new ComputationContext(batchReportReader, PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(batchReportReader), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(reportReader), languageRepository);
sut.execute(context);
Map<Integer, Component> componentsByRef = getComponentsByRef(context.getRoot());
@Test
public void compute_keys_and_uuids_on_project_having_module_and_directory() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.addChildRef(5)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(5)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("/")
.addChildRef(6)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(6)
.setType(Constants.ComponentType.FILE)
.setPath("pom.xml")
.build());
- BatchReportReader batchReportReader = new BatchReportReader(reportDir);
- ComputationContext context = new ComputationContext(batchReportReader, PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(batchReportReader), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(reportReader), languageRepository);
sut.execute(context);
Map<Integer, Component> componentsByRef = getComponentsByRef(context.getRoot());
@Test
public void compute_keys_and_uuids_on_multi_modules() throws Exception {
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("MODULE_KEY")
.addChildRef(3)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(3)
.setType(Constants.ComponentType.MODULE)
.setKey("SUB_MODULE_KEY")
.addChildRef(4)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(4)
.setType(Constants.ComponentType.DIRECTORY)
.setPath("src/main/java/dir")
.addChildRef(5)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(5)
.setType(Constants.ComponentType.FILE)
.setPath("src/main/java/dir/Foo.java")
.build());
- BatchReportReader batchReportReader = new BatchReportReader(reportDir);
- ComputationContext context = new ComputationContext(batchReportReader, PROJECT_KEY, projectSettings,
- dbClient, ComponentTreeBuilders.from(batchReportReader), languageRepository);
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, projectSettings,
+ dbClient, ComponentTreeBuilders.from(reportReader), languageRepository);
sut.execute(context);
Map<Integer, Component> componentsByRef = getComponentsByRef(context.getRoot());
package org.sonar.server.computation.step;
-import java.io.File;
import java.io.IOException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.sonar.api.config.Settings;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
-import org.sonar.batch.protocol.output.BatchReportWriter;
import org.sonar.core.computation.dbcleaner.ProjectCleaner;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.purge.IdUuidPair;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DbComponentsRefCache;
import org.sonar.server.computation.component.DumbComponent;
public class PurgeDatastoresStepTest extends BaseStepTest {
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
private static final String PROJECT_KEY = "PROJECT_KEY";
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+
ProjectCleaner projectCleaner = mock(ProjectCleaner.class);
DbComponentsRefCache dbComponentsRefCache = new DbComponentsRefCache();
ProjectSettingsRepository projectSettingsRepository = mock(ProjectSettingsRepository.class);
public void call_purge_method_of_the_purge_task() throws IOException {
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(123L, PROJECT_KEY, "UUID-1234"));
- File reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- ComputationContext context = new ComputationContext(new BatchReportReader(reportDir), PROJECT_KEY, new Settings(),
+ ComputationContext context = new ComputationContext(reportReader, PROJECT_KEY, new Settings(),
mock(DbClient.class), ComponentTreeBuilders.from(DumbComponent.DUMB_PROJECT), mock(LanguageRepository.class));
sut.execute(context);
import org.sonar.api.resources.AbstractLanguage;
import org.sonar.api.resources.Language;
import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.batch.protocol.output.BatchReportReader;
import org.sonar.core.UtcDateUtils;
import org.sonar.core.measure.db.MeasureDto;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentTreeBuilder;
import org.sonar.server.computation.component.DumbComponent;
*/
package org.sonar.server.computation.step;
+import java.io.IOException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.utils.System2;
import org.sonar.batch.protocol.Constants;
import org.sonar.batch.protocol.output.BatchReport;
-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.batch.BatchReportReaderRule;
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.issue.notification.NewIssuesNotificationFactory;
import org.sonar.server.notifications.NotificationService;
-import java.io.File;
-import java.io.IOException;
-
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
private static final String PROJECT_UUID = "PROJECT_UUID";
private static final String PROJECT_KEY = "PROJECT_KEY";
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
@Rule
public TemporaryFolder temp = new TemporaryFolder();
Settings projectSettings = new Settings();
SendIssueNotificationsStep sut;
- File reportDir;
-
@Before
public void setUp() throws Exception {
issueCache = new IssueCache(temp.newFile(), System2.INSTANCE);
dbComponentsRefCache.addComponent(1, new DbComponentsRefCache.DbComponent(1L, PROJECT_KEY, PROJECT_UUID));
- reportDir = temp.newFolder();
- BatchReportWriter writer = new BatchReportWriter(reportDir);
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setRootComponentRef(1)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
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(reportReader, PROJECT_KEY, projectSettings,
mock(DbClient.class), ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, null, null)), 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(reportReader, PROJECT_KEY, projectSettings,
mock(DbClient.class), ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, null, null)), mock(LanguageRepository.class)));
verify(notifService).deliver(any(NewIssuesNotification.class));
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.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
import org.sonar.api.CoreProperties;
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.batch.protocol.output.BatchReportWriter;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.DbTester;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.computation.ComputationContext;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentTreeBuilders;
import org.sonar.server.computation.component.DumbComponent;
private static final String PROJECT_KEY = "PROJECT_KEY";
private static final String MODULE_KEY = "MODULE_KEY";
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
@ClassRule
public static DbTester dbTester = new DbTester();
-
@Rule
- public TemporaryFolder temp = new TemporaryFolder();
+ public ExpectedException thrown = ExpectedException.none();
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
DbClient dbClient;
Settings settings;
- File reportDir;
- BatchReportWriter writer;
-
ValidateProjectStep sut;
@Before
dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao());
dbSession = dbClient.openSession(false);
settings = new Settings();
- reportDir = temp.newFolder();
- writer = new BatchReportWriter(reportDir);
sut = new ValidateProjectStep(dbClient, settings);
}
@Test
public void not_fail_if_provisioning_enforced_and_project_exists() throws Exception {
- writer.writeMetadata(BatchReport.Metadata.newBuilder().build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
dbClient.componentDao().insert(dbSession, ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY));
dbSession.commit();
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY)), null));
}
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("Unable to scan non-existing project '" + PROJECT_KEY + "'");
- writer.writeMetadata(BatchReport.Metadata.newBuilder().build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
settings.appendProperty(CoreProperties.CORE_PREVENT_AUTOMATIC_PROJECT_CREATION, "true");
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY)), null));
}
@Test
public void fail_if_provisioning_not_enforced_and_project_does_not_exists() throws Exception {
- writer.writeMetadata(BatchReport.Metadata.newBuilder().build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
settings.appendProperty(CoreProperties.CORE_PREVENT_AUTOMATIC_PROJECT_CREATION, "false");
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY)), null));
}
@Test
public void not_fail_on_valid_branch() throws Exception {
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setBranch("origin/master")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY + ":origin/master")), null));
}
thrown.expectMessage("Validation of project failed:\n" +
" o \"bran#ch\" is not a valid branch name. Allowed characters are alphanumeric, '-', '_', '.' and '/'.");
- writer.writeMetadata(BatchReport.Metadata.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder()
.setBranch("bran#ch")
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.build());
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY + ":bran#ch")), null));
}
" o \"Project\\Key\" is not a valid project or module key. Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.\n" +
" o \"Module$Key\" is not a valid project or module key. Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit");
- writer.writeMetadata(BatchReport.Metadata.newBuilder().build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(invalidProjectKey)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey("Module$Key")
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", invalidProjectKey,
new DumbComponent(Component.Type.MODULE, 2, "BCDE", "Module$Key"));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null, ComponentTreeBuilders.from(root), null));
+ sut.execute(new ComputationContext(reportReader, null, null, null, ComponentTreeBuilders.from(root), null));
}
@Test
"If you really want to stop directly analysing project \"" + MODULE_KEY + "\", please first delete it from SonarQube and then relaunch the analysis of project \""
+ PROJECT_KEY + "\".");
- writer.writeMetadata(BatchReport.Metadata.newBuilder().build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey(MODULE_KEY)
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.MODULE, 2, "BCDE", MODULE_KEY));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(root), null));
}
thrown.expectMessage("Validation of project failed:\n" +
" o Module \"" + MODULE_KEY + "\" is already part of project \"" + anotherProjectKey + "\"");
- writer.writeMetadata(BatchReport.Metadata.newBuilder().build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey(MODULE_KEY)
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.MODULE, 2, "BCDE", MODULE_KEY));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(root), null));
}
"If you really want to stop directly analysing project \"" + anotherProjectKey + "\", please first delete it from SonarQube and then relaunch the analysis of project \""
+ PROJECT_KEY + "\".");
- writer.writeMetadata(BatchReport.Metadata.newBuilder().build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(1)
.setType(Constants.ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
- writer.writeComponent(BatchReport.Component.newBuilder()
+ reportReader.putComponent(BatchReport.Component.newBuilder()
.setRef(2)
.setType(Constants.ComponentType.MODULE)
.setKey(MODULE_KEY)
DumbComponent root = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
new DumbComponent(Component.Type.MODULE, 2, "BCDE", MODULE_KEY));
- sut.execute(new ComputationContext(new BatchReportReader(reportDir), null, null, null,
+ sut.execute(new ComputationContext(reportReader, null, null, null,
ComponentTreeBuilders.from(root), null));
}
*/
package org.sonar.batch.protocol.output;
-import org.sonar.batch.protocol.ProtobufUtil;
-
import java.io.File;
+import org.sonar.batch.protocol.ProtobufUtil;
public class BatchReportWriter {
/**
* Metadata is mandatory
*/
- public void writeMetadata(BatchReport.Metadata metadata) {
+ public File writeMetadata(BatchReport.Metadata metadata) {
ProtobufUtil.writeToFile(metadata, fileStructure.metadataFile());
+ return fileStructure.metadataFile();
}
- public void writeComponent(BatchReport.Component component) {
+ public File writeComponent(BatchReport.Component component) {
File file = fileStructure.fileFor(FileStructure.Domain.COMPONENT, component.getRef());
ProtobufUtil.writeToFile(component, file);
+ return file;
}
- public void writeComponentIssues(int componentRef, Iterable<BatchReport.Issue> issues) {
+ public File writeComponentIssues(int componentRef, Iterable<BatchReport.Issue> issues) {
BatchReport.Issues.Builder issuesBuilder = BatchReport.Issues.newBuilder();
issuesBuilder.setComponentRef(componentRef);
issuesBuilder.addAllIssue(issues);
File file = fileStructure.fileFor(FileStructure.Domain.ISSUES, componentRef);
ProtobufUtil.writeToFile(issuesBuilder.build(), file);
+ return file;
}
- public void writeComponentMeasures(int componentRef, Iterable<BatchReport.Measure> measures) {
+ public File writeComponentMeasures(int componentRef, Iterable<BatchReport.Measure> measures) {
BatchReport.Measures.Builder measuresBuilder = BatchReport.Measures.newBuilder();
measuresBuilder.setComponentRef(componentRef);
measuresBuilder.addAllMeasure(measures);
File file = fileStructure.fileFor(FileStructure.Domain.MEASURES, componentRef);
ProtobufUtil.writeToFile(measuresBuilder.build(), file);
+ return file;
}
- public void writeComponentChangesets(BatchReport.Changesets changesets) {
+ public File writeComponentChangesets(BatchReport.Changesets changesets) {
File file = fileStructure.fileFor(FileStructure.Domain.CHANGESETS, changesets.getComponentRef());
ProtobufUtil.writeToFile(changesets, file);
+ return file;
}
/**
* Issues on components which have been deleted are stored in another location.
* Temporary hack, waiting for computation stack
*/
- public void writeDeletedComponentIssues(int componentRef, String componentUuid, Iterable<BatchReport.Issue> issues) {
+ public File writeDeletedComponentIssues(int componentRef, String componentUuid, Iterable<BatchReport.Issue> issues) {
BatchReport.Issues.Builder issuesBuilder = BatchReport.Issues.newBuilder();
issuesBuilder.setComponentRef(componentRef);
issuesBuilder.setComponentUuid(componentUuid);
issuesBuilder.addAllIssue(issues);
File file = fileStructure.fileFor(FileStructure.Domain.ISSUES_ON_DELETED, componentRef);
ProtobufUtil.writeToFile(issuesBuilder.build(), file);
+ return file;
}
- public void writeComponentDuplications(int componentRef, Iterable<BatchReport.Duplication> duplications) {
+ public File writeComponentDuplications(int componentRef, Iterable<BatchReport.Duplication> duplications) {
BatchReport.Duplications.Builder builder = BatchReport.Duplications.newBuilder();
builder.setComponentRef(componentRef);
builder.addAllDuplication(duplications);
File file = fileStructure.fileFor(FileStructure.Domain.DUPLICATIONS, componentRef);
ProtobufUtil.writeToFile(builder.build(), file);
+ return file;
}
- public void writeComponentSymbols(int componentRef, Iterable<BatchReport.Symbols.Symbol> symbols) {
+ public File writeComponentSymbols(int componentRef, Iterable<BatchReport.Symbols.Symbol> symbols) {
BatchReport.Symbols.Builder builder = BatchReport.Symbols.newBuilder();
builder.setFileRef(componentRef);
builder.addAllSymbol(symbols);
File file = fileStructure.fileFor(FileStructure.Domain.SYMBOLS, componentRef);
ProtobufUtil.writeToFile(builder.build(), file);
+ return file;
}
- public void writeComponentSyntaxHighlighting(int componentRef, Iterable<BatchReport.SyntaxHighlighting> syntaxHighlightingRules) {
+ public File writeComponentSyntaxHighlighting(int componentRef, Iterable<BatchReport.SyntaxHighlighting> syntaxHighlightingRules) {
File file = fileStructure.fileFor(FileStructure.Domain.SYNTAX_HIGHLIGHTINGS, componentRef);
ProtobufUtil.writeMessagesToFile(syntaxHighlightingRules, file);
+ return file;
}
- public void writeComponentCoverage(int componentRef, Iterable<BatchReport.Coverage> coverageList) {
+ public File writeComponentCoverage(int componentRef, Iterable<BatchReport.Coverage> coverageList) {
File file = fileStructure.fileFor(FileStructure.Domain.COVERAGES, componentRef);
ProtobufUtil.writeMessagesToFile(coverageList, file);
+ return file;
}
- public void writeTests(int componentRef, Iterable<BatchReport.Test> tests) {
+ public File writeTests(int componentRef, Iterable<BatchReport.Test> tests) {
File file = fileStructure.fileFor(FileStructure.Domain.TESTS, componentRef);
ProtobufUtil.writeMessagesToFile(tests, file);
+ return file;
}
- public void writeCoverageDetails(int componentRef, Iterable<BatchReport.CoverageDetail> tests) {
+ public File writeCoverageDetails(int componentRef, Iterable<BatchReport.CoverageDetail> tests) {
File file = fileStructure.fileFor(FileStructure.Domain.COVERAGE_DETAILS, componentRef);
ProtobufUtil.writeMessagesToFile(tests, file);
+ return file;
}
public File getSourceFile(int componentRef) {