@@ -1,14 +1,25 @@ | |||
#!/bin/bash | |||
# Usage: compile_protobuf <inputDir> <outputDir> | |||
# Compiles all the Protocol Buffers files (*.proto) to Java source code. | |||
# IMPORTANT - protobuf 2.6.1 must be installed. Other versions are not supported. | |||
# Usage: compile_protobuf <module> <type: main or test> | |||
function compile_protobuf { | |||
echo "Compiling [$1] to [$2]..." | |||
mkdir -p $2 | |||
protoc --proto_path=$1 --java_out=$2 $1/*.proto | |||
INPUT="$1/src/$2/protobuf" | |||
OUTPUT="$1/src/$2/gen-java" | |||
if [ -d $INPUT ] | |||
then | |||
echo "Compiling [$INPUT] to [$OUTPUT]..." | |||
rm -rf $OUTPUT | |||
mkdir -p $OUTPUT | |||
protoc --proto_path=$INPUT --java_out=$OUTPUT $INPUT/*.proto | |||
fi | |||
} | |||
compile_protobuf "sonar-core/src/test/protobuf" "sonar-core/src/test/gen-java" | |||
compile_protobuf "sonar-batch-protocol/src/main/protobuf" "sonar-batch-protocol/src/main/gen-java" | |||
compile_protobuf "sonar-batch-protocol" "main" | |||
compile_protobuf "sonar-core" "test" | |||
compile_protobuf "sonar-db" "main" | |||
@@ -23,7 +23,6 @@ import java.io.IOException; | |||
import java.util.Arrays; | |||
import java.util.Timer; | |||
import java.util.concurrent.atomic.AtomicLong; | |||
import org.apache.commons.io.IOUtils; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
@@ -32,9 +31,9 @@ import org.slf4j.LoggerFactory; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.api.utils.internal.Uuids; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.source.FileSourceDao; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper; | |||
import org.sonar.server.source.index.SourceLineResultSetIterator; | |||
@@ -111,8 +110,8 @@ public class SourceDbBenchmarkTest { | |||
} | |||
private byte[] generateData() { | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Line.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
FileSources.Line.Builder lineBuilder = FileSources.Line.newBuilder(); | |||
for (int i = 1; i <= NUMBER_OF_LINES; i++) { | |||
lineBuilder.clear(); | |||
dataBuilder.addLines(lineBuilder |
@@ -31,8 +31,8 @@ import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.server.es.EsClient; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper; | |||
import org.sonar.server.source.index.SourceLineDoc; | |||
import org.sonar.server.source.index.SourceLineIndex; | |||
@@ -115,8 +115,8 @@ public class SourceIndexBenchmarkTest { | |||
private final int nbLinesPerFile; | |||
private int currentProject = 0; | |||
private AtomicLong count = new AtomicLong(0L); | |||
private final FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
private final FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Line.newBuilder(); | |||
private final FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
private final FileSources.Line.Builder lineBuilder = FileSources.Line.newBuilder(); | |||
SourceIterator(long nbFiles, int nbLinesPerFile) { | |||
this.nbFiles = nbFiles; |
@@ -20,14 +20,13 @@ | |||
package org.sonar.server.computation.source; | |||
import org.apache.commons.codec.binary.Hex; | |||
import org.apache.commons.codec.digest.DigestUtils; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import java.security.MessageDigest; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
import org.apache.commons.codec.binary.Hex; | |||
import org.apache.commons.codec.digest.DigestUtils; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.sonar.db.FileSources; | |||
import static java.nio.charset.StandardCharsets.UTF_8; | |||
@@ -69,7 +68,7 @@ public class ComputeFileSourceData { | |||
data.srcMd5Digest.update(source.getBytes(UTF_8)); | |||
} | |||
FileSourceDb.Line.Builder lineBuilder = data.fileSourceBuilder.addLinesBuilder() | |||
FileSources.Line.Builder lineBuilder = data.fileSourceBuilder.addLinesBuilder() | |||
.setSource(source) | |||
.setLine(currentLine); | |||
for (LineReader lineReader : lineReaders) { | |||
@@ -85,17 +84,17 @@ public class ComputeFileSourceData { | |||
return DigestUtils.md5Hex(reducedLine); | |||
} | |||
private boolean hasNextLine(){ | |||
private boolean hasNextLine() { | |||
return linesIterator.hasNext() || currentLine < numberOfLines; | |||
} | |||
public static class Data { | |||
private final StringBuilder lineHashes; | |||
private final MessageDigest srcMd5Digest; | |||
private final FileSourceDb.Data.Builder fileSourceBuilder; | |||
private final FileSources.Data.Builder fileSourceBuilder; | |||
public Data() { | |||
this.fileSourceBuilder = FileSourceDb.Data.newBuilder(); | |||
this.fileSourceBuilder = FileSources.Data.newBuilder(); | |||
this.lineHashes = new StringBuilder(); | |||
this.srcMd5Digest = DigestUtils.getMd5Digest(); | |||
} | |||
@@ -108,7 +107,7 @@ public class ComputeFileSourceData { | |||
return lineHashes.toString(); | |||
} | |||
public FileSourceDb.Data getFileSourceData() { | |||
public FileSources.Data getFileSourceData() { | |||
return fileSourceBuilder.build(); | |||
} | |||
} |
@@ -21,7 +21,7 @@ | |||
package org.sonar.server.computation.source; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import javax.annotation.CheckForNull; | |||
@@ -37,7 +37,7 @@ public class CoverageLineReader implements LineReader { | |||
} | |||
@Override | |||
public void read(FileSourceDb.Line.Builder lineBuilder) { | |||
public void read(FileSources.Line.Builder lineBuilder) { | |||
BatchReport.Coverage reportCoverage = getNextLineCoverageIfMatchLine(lineBuilder.getLine()); | |||
if (reportCoverage != null) { | |||
processUnitTest(lineBuilder, reportCoverage); | |||
@@ -47,7 +47,7 @@ public class CoverageLineReader implements LineReader { | |||
} | |||
} | |||
private static void processUnitTest(FileSourceDb.Line.Builder lineBuilder, BatchReport.Coverage reportCoverage){ | |||
private static void processUnitTest(FileSources.Line.Builder lineBuilder, BatchReport.Coverage reportCoverage){ | |||
if (reportCoverage.hasUtHits()) { | |||
lineBuilder.setUtLineHits(reportCoverage.getUtHits() ? 1 : 0); | |||
} | |||
@@ -57,7 +57,7 @@ public class CoverageLineReader implements LineReader { | |||
} | |||
} | |||
private static void processIntegrationTest(FileSourceDb.Line.Builder lineBuilder, BatchReport.Coverage reportCoverage){ | |||
private static void processIntegrationTest(FileSources.Line.Builder lineBuilder, BatchReport.Coverage reportCoverage){ | |||
if (reportCoverage.hasItHits()) { | |||
lineBuilder.setItLineHits(reportCoverage.getItHits() ? 1 : 0); | |||
} | |||
@@ -67,7 +67,7 @@ public class CoverageLineReader implements LineReader { | |||
} | |||
} | |||
private static void processOverallTest(FileSourceDb.Line.Builder lineBuilder, BatchReport.Coverage reportCoverage){ | |||
private static void processOverallTest(FileSources.Line.Builder lineBuilder, BatchReport.Coverage reportCoverage){ | |||
if (reportCoverage.hasUtHits() || reportCoverage.hasItHits()) { | |||
lineBuilder.setOverallLineHits((reportCoverage.getUtHits() || reportCoverage.getItHits()) ? 1 : 0); | |||
} |
@@ -27,7 +27,7 @@ import java.util.Iterator; | |||
import java.util.List; | |||
import java.util.Map; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
import static com.google.common.collect.Maps.newHashMap; | |||
@@ -47,7 +47,7 @@ public class DuplicationLineReader implements LineReader { | |||
} | |||
@Override | |||
public void read(FileSourceDb.Line.Builder lineBuilder) { | |||
public void read(FileSources.Line.Builder lineBuilder) { | |||
int line = lineBuilder.getLine(); | |||
List<BatchReport.Range> blocks = findDuplicationBlockMatchingLine(line); | |||
for (BatchReport.Range block : blocks) { |
@@ -21,15 +21,13 @@ | |||
package org.sonar.server.computation.source; | |||
import com.google.common.collect.ImmutableMap; | |||
import org.sonar.batch.protocol.Constants; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import javax.annotation.CheckForNull; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
import java.util.Map; | |||
import javax.annotation.CheckForNull; | |||
import org.sonar.batch.protocol.Constants; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.db.FileSources; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
@@ -58,7 +56,7 @@ public class HighlightingLineReader implements LineReader { | |||
} | |||
@Override | |||
public void read(FileSourceDb.Line.Builder lineBuilder) { | |||
public void read(FileSources.Line.Builder lineBuilder) { | |||
int line = lineBuilder.getLine(); | |||
StringBuilder highlighting = new StringBuilder(); | |||
@@ -20,10 +20,10 @@ | |||
package org.sonar.server.computation.source; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
public interface LineReader { | |||
void read(FileSourceDb.Line.Builder lineBuilder); | |||
void read(FileSources.Line.Builder lineBuilder); | |||
} |
@@ -21,7 +21,7 @@ | |||
package org.sonar.server.computation.source; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
public class ScmLineReader implements LineReader { | |||
@@ -30,8 +30,9 @@ public class ScmLineReader implements LineReader { | |||
public ScmLineReader(BatchReport.Changesets scmReport) { | |||
this.scmReport = scmReport; | |||
} | |||
@Override | |||
public void read(FileSourceDb.Line.Builder lineBuilder) { | |||
public void read(FileSources.Line.Builder lineBuilder) { | |||
int changeSetIndex = scmReport.getChangesetIndexByLine(lineBuilder.getLine() - 1); | |||
BatchReport.Changesets.Changeset changeset = scmReport.getChangeset(changeSetIndex); | |||
boolean hasAuthor = changeset.hasAuthor(); |
@@ -32,7 +32,7 @@ import java.util.List; | |||
import java.util.Map; | |||
import java.util.Set; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
public class SymbolsLineReader implements LineReader { | |||
@@ -49,7 +49,7 @@ public class SymbolsLineReader implements LineReader { | |||
} | |||
@Override | |||
public void read(FileSourceDb.Line.Builder lineBuilder) { | |||
public void read(FileSources.Line.Builder lineBuilder) { | |||
int line = lineBuilder.getLine(); | |||
List<BatchReport.Symbol> lineSymbols = findSymbolsMatchingLine(line); | |||
for (BatchReport.Symbol lineSymbol : lineSymbols) { |
@@ -47,7 +47,7 @@ import org.sonar.server.computation.source.HighlightingLineReader; | |||
import org.sonar.server.computation.source.LineReader; | |||
import org.sonar.server.computation.source.ScmLineReader; | |||
import org.sonar.server.computation.source.SymbolsLineReader; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import static org.sonar.server.computation.component.ComponentVisitor.Order.PRE_ORDER; | |||
@@ -120,7 +120,7 @@ public class PersistFileSourcesStep implements ComputationStep { | |||
} | |||
private void persistSource(ComputeFileSourceData.Data fileSourceData, String componentUuid) { | |||
FileSourceDb.Data fileData = fileSourceData.getFileSourceData(); | |||
FileSources.Data fileData = fileSourceData.getFileSourceData(); | |||
byte[] data = FileSourceDto.encodeSourceData(fileData); | |||
String dataHash = DigestUtils.md5Hex(data); |
@@ -40,7 +40,10 @@ import org.sonar.api.utils.internal.Uuids; | |||
import org.sonar.api.utils.log.Logger; | |||
import org.sonar.api.utils.log.Loggers; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.core.util.CloseableIterator; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.MyBatis; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.db.source.FileSourceDto.Type; | |||
@@ -48,10 +51,6 @@ 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.computation.component.TreeRootHolder; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.db.FileSourceDb.Test.TestStatus; | |||
import org.sonar.core.util.CloseableIterator; | |||
public class PersistTestsStep implements ComputationStep { | |||
@@ -121,9 +120,9 @@ public class PersistTestsStep implements ComputationStep { | |||
} | |||
private void persistTestResults(Component component) { | |||
Multimap<String, FileSourceDb.Test.Builder> testsByName = buildDbTests(component.getRef()); | |||
Table<String, String, FileSourceDb.Test.CoveredFile.Builder> coveredFilesByName = loadCoverageDetails(component.getRef()); | |||
List<FileSourceDb.Test> tests = addCoveredFilesToTests(testsByName, coveredFilesByName); | |||
Multimap<String, FileSources.Test.Builder> testsByName = buildDbTests(component.getRef()); | |||
Table<String, String, FileSources.Test.CoveredFile.Builder> coveredFilesByName = loadCoverageDetails(component.getRef()); | |||
List<FileSources.Test> tests = addCoveredFilesToTests(testsByName, coveredFilesByName); | |||
if (checkIfThereAreUnprocessedCoverageDetails(testsByName, coveredFilesByName, component.getKey())) { | |||
hasUnprocessedCoverageDetails = true; | |||
} | |||
@@ -154,8 +153,8 @@ public class PersistTestsStep implements ComputationStep { | |||
} | |||
} | |||
private boolean checkIfThereAreUnprocessedCoverageDetails(Multimap<String, FileSourceDb.Test.Builder> testsByName, | |||
Table<String, String, FileSourceDb.Test.CoveredFile.Builder> coveredFilesByName, String componentKey) { | |||
private boolean checkIfThereAreUnprocessedCoverageDetails(Multimap<String, FileSources.Test.Builder> testsByName, | |||
Table<String, String, FileSources.Test.CoveredFile.Builder> coveredFilesByName, String componentKey) { | |||
Set<String> unprocessedCoverageDetailNames = new HashSet<>(coveredFilesByName.rowKeySet()); | |||
unprocessedCoverageDetailNames.removeAll(testsByName.keySet()); | |||
boolean hasUnprocessedCoverage = !unprocessedCoverageDetailNames.isEmpty(); | |||
@@ -165,13 +164,13 @@ public class PersistTestsStep implements ComputationStep { | |||
return hasUnprocessedCoverage; | |||
} | |||
private List<FileSourceDb.Test> addCoveredFilesToTests(Multimap<String, FileSourceDb.Test.Builder> testsByName, | |||
Table<String, String, FileSourceDb.Test.CoveredFile.Builder> coveredFilesByName) { | |||
List<FileSourceDb.Test> tests = new ArrayList<>(); | |||
for (FileSourceDb.Test.Builder test : testsByName.values()) { | |||
Collection<FileSourceDb.Test.CoveredFile.Builder> coveredFiles = coveredFilesByName.row(test.getName()).values(); | |||
private List<FileSources.Test> addCoveredFilesToTests(Multimap<String, FileSources.Test.Builder> testsByName, | |||
Table<String, String, FileSources.Test.CoveredFile.Builder> coveredFilesByName) { | |||
List<FileSources.Test> tests = new ArrayList<>(); | |||
for (FileSources.Test.Builder test : testsByName.values()) { | |||
Collection<FileSources.Test.CoveredFile.Builder> coveredFiles = coveredFilesByName.row(test.getName()).values(); | |||
if (!coveredFiles.isEmpty()) { | |||
for (FileSourceDb.Test.CoveredFile.Builder coveredFile : coveredFiles) { | |||
for (FileSources.Test.CoveredFile.Builder coveredFile : coveredFiles) { | |||
test.addCoveredFile(coveredFile); | |||
} | |||
} | |||
@@ -181,20 +180,20 @@ public class PersistTestsStep implements ComputationStep { | |||
return tests; | |||
} | |||
private Multimap<String, FileSourceDb.Test.Builder> buildDbTests(int componentRed) { | |||
Multimap<String, FileSourceDb.Test.Builder> tests = ArrayListMultimap.create(); | |||
private Multimap<String, FileSources.Test.Builder> buildDbTests(int componentRed) { | |||
Multimap<String, FileSources.Test.Builder> tests = ArrayListMultimap.create(); | |||
try (CloseableIterator<BatchReport.Test> testIterator = reportReader.readTests(componentRed)) { | |||
while (testIterator.hasNext()) { | |||
BatchReport.Test batchTest = testIterator.next(); | |||
FileSourceDb.Test.Builder dbTest = FileSourceDb.Test.newBuilder(); | |||
FileSources.Test.Builder dbTest = FileSources.Test.newBuilder(); | |||
dbTest.setUuid(Uuids.create()); | |||
dbTest.setName(batchTest.getName()); | |||
if (batchTest.hasStacktrace()) { | |||
dbTest.setStacktrace(batchTest.getStacktrace()); | |||
} | |||
if (batchTest.hasStatus()) { | |||
dbTest.setStatus(TestStatus.valueOf(batchTest.getStatus().name())); | |||
dbTest.setStatus(FileSources.Test.TestStatus.valueOf(batchTest.getStatus().name())); | |||
} | |||
if (batchTest.hasMsg()) { | |||
dbTest.setMsg(batchTest.getMsg()); | |||
@@ -213,8 +212,8 @@ public class PersistTestsStep implements ComputationStep { | |||
/** | |||
* returns a Table of (test name, main file uuid, covered file) | |||
*/ | |||
private Table<String, String, FileSourceDb.Test.CoveredFile.Builder> loadCoverageDetails(int testFileRef) { | |||
Table<String, String, FileSourceDb.Test.CoveredFile.Builder> nameToCoveredFiles = HashBasedTable.create(); | |||
private Table<String, String, FileSources.Test.CoveredFile.Builder> loadCoverageDetails(int testFileRef) { | |||
Table<String, String, FileSources.Test.CoveredFile.Builder> nameToCoveredFiles = HashBasedTable.create(); | |||
try (CloseableIterator<BatchReport.CoverageDetail> coverageIterator = reportReader.readCoverageDetails(testFileRef)) { | |||
while (coverageIterator.hasNext()) { | |||
@@ -222,10 +221,10 @@ public class PersistTestsStep implements ComputationStep { | |||
for (BatchReport.CoverageDetail.CoveredFile batchCoveredFile : batchCoverageDetail.getCoveredFileList()) { | |||
String testName = batchCoverageDetail.getTestName(); | |||
String mainFileUuid = getUuid(batchCoveredFile.getFileRef()); | |||
FileSourceDb.Test.CoveredFile.Builder existingDbCoveredFile = nameToCoveredFiles.get(testName, mainFileUuid); | |||
FileSources.Test.CoveredFile.Builder existingDbCoveredFile = nameToCoveredFiles.get(testName, mainFileUuid); | |||
List<Integer> batchCoveredLines = batchCoveredFile.getCoveredLineList(); | |||
if (existingDbCoveredFile == null) { | |||
FileSourceDb.Test.CoveredFile.Builder dbCoveredFile = FileSourceDb.Test.CoveredFile.newBuilder() | |||
FileSources.Test.CoveredFile.Builder dbCoveredFile = FileSources.Test.CoveredFile.newBuilder() | |||
.setFileUuid(getUuid(batchCoveredFile.getFileRef())) | |||
.addAllCoveredLine(batchCoveredLines); | |||
nameToCoveredFiles.put(testName, mainFileUuid, dbCoveredFile); |
@@ -22,11 +22,11 @@ package org.sonar.server.source.index; | |||
import org.elasticsearch.action.update.UpdateRequest; | |||
import org.sonar.api.utils.text.JsonWriter; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.ResultSetIterator; | |||
import org.sonar.server.es.EsUtils; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import javax.annotation.Nullable; | |||
@@ -64,16 +64,16 @@ public class SourceLineResultSetIterator extends ResultSetIterator<FileSourcesUp | |||
String projectUuid = rs.getString(1); | |||
String fileUuid = rs.getString(2); | |||
Date updatedAt = new Date(rs.getLong(3)); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(rs.getBinaryStream(4)); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(rs.getBinaryStream(4)); | |||
return toRow(projectUuid, fileUuid, updatedAt, data); | |||
} | |||
/** | |||
* Convert protobuf message to data required for Elasticsearch indexing | |||
*/ | |||
public static Row toRow(String projectUuid, String fileUuid, Date updatedAt, FileSourceDb.Data data) { | |||
public static Row toRow(String projectUuid, String fileUuid, Date updatedAt, FileSources.Data data) { | |||
Row result = new Row(projectUuid, fileUuid, updatedAt.getTime()); | |||
for (FileSourceDb.Line line : data.getLinesList()) { | |||
for (FileSources.Line line : data.getLinesList()) { | |||
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); | |||
// all the fields must be present, even if value is null |
@@ -20,18 +20,6 @@ | |||
package org.sonar.server.test.index; | |||
import org.elasticsearch.action.update.UpdateRequest; | |||
import org.sonar.api.utils.text.JsonWriter; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.ResultSetIterator; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper.Row; | |||
import javax.annotation.Nullable; | |||
import java.io.ByteArrayOutputStream; | |||
import java.io.OutputStreamWriter; | |||
import java.nio.charset.StandardCharsets; | |||
@@ -40,6 +28,16 @@ import java.sql.ResultSet; | |||
import java.sql.SQLException; | |||
import java.util.Date; | |||
import java.util.List; | |||
import javax.annotation.Nullable; | |||
import org.elasticsearch.action.update.UpdateRequest; | |||
import org.sonar.api.utils.text.JsonWriter; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.ResultSetIterator; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper.Row; | |||
import static org.sonar.server.test.index.TestIndexDefinition.FIELD_COVERED_FILES; | |||
import static org.sonar.server.test.index.TestIndexDefinition.FIELD_COVERED_FILE_LINES; | |||
@@ -78,16 +76,16 @@ public class TestResultSetIterator extends ResultSetIterator<Row> { | |||
String projectUuid = rs.getString(1); | |||
String fileUuid = rs.getString(2); | |||
Date updatedAt = new Date(rs.getLong(3)); | |||
List<FileSourceDb.Test> data = FileSourceDto.decodeTestData(rs.getBinaryStream(4)); | |||
List<FileSources.Test> data = FileSourceDto.decodeTestData(rs.getBinaryStream(4)); | |||
return toRow(projectUuid, fileUuid, updatedAt, data); | |||
} | |||
/** | |||
* Convert protobuf message to tests required for Elasticsearch indexing | |||
*/ | |||
public static Row toRow(String projectUuid, String fileUuid, Date updatedAt, List<FileSourceDb.Test> tests) { | |||
public static Row toRow(String projectUuid, String fileUuid, Date updatedAt, List<FileSources.Test> tests) { | |||
Row result = new Row(projectUuid, fileUuid, updatedAt.getTime()); | |||
for (FileSourceDb.Test test : tests) { | |||
for (FileSources.Test test : tests) { | |||
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); | |||
// all the fields must be present, even if value is null | |||
@@ -103,7 +101,7 @@ public class TestResultSetIterator extends ResultSetIterator<Row> { | |||
writer.prop(FIELD_STACKTRACE, test.hasStacktrace() ? test.getStacktrace() : null); | |||
writer.name(FIELD_COVERED_FILES); | |||
writer.beginArray(); | |||
for (FileSourceDb.Test.CoveredFile coveredFile : test.getCoveredFileList()) { | |||
for (FileSources.Test.CoveredFile coveredFile : test.getCoveredFileList()) { | |||
writer.beginObject(); | |||
writer.prop(FIELD_COVERED_FILE_UUID, coveredFile.getFileUuid()); | |||
writer.name(FIELD_COVERED_FILE_LINES).valueObject(coveredFile.getCoveredLineList()); |
@@ -22,7 +22,7 @@ package org.sonar.server.computation.source; | |||
import com.google.common.collect.Lists; | |||
import org.junit.Test; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -31,11 +31,10 @@ public class ComputeFileSourceDataTest { | |||
@Test | |||
public void compute_one_line() { | |||
ComputeFileSourceData computeFileSourceData = new ComputeFileSourceData( | |||
newArrayList("line1").iterator(), | |||
Lists.<LineReader>newArrayList(new MockLineReader()), | |||
1 | |||
); | |||
ComputeFileSourceData computeFileSourceData = new ComputeFileSourceData( | |||
newArrayList("line1").iterator(), | |||
Lists.<LineReader>newArrayList(new MockLineReader()), | |||
1); | |||
ComputeFileSourceData.Data data = computeFileSourceData.compute(); | |||
assertThat(data.getLineHashes()).isEqualTo("137f72c3708c6bd0de00a0e5a69c699b"); | |||
@@ -49,8 +48,7 @@ public class ComputeFileSourceDataTest { | |||
ComputeFileSourceData computeFileSourceData = new ComputeFileSourceData( | |||
newArrayList("line1", "line2").iterator(), | |||
Lists.<LineReader>newArrayList(new MockLineReader()), | |||
2 | |||
); | |||
2); | |||
ComputeFileSourceData.Data data = computeFileSourceData.compute(); | |||
assertThat(data.getLineHashes()).isEqualTo("137f72c3708c6bd0de00a0e5a69c699b\ne6251bcf1a7dc3ba5e7933e325bbe605"); | |||
@@ -66,8 +64,7 @@ public class ComputeFileSourceDataTest { | |||
newArrayList("line1").iterator(), | |||
Lists.<LineReader>newArrayList(new MockLineReader()), | |||
// There's only one line in the line iterator but the file has 2 lines | |||
2 | |||
); | |||
2); | |||
ComputeFileSourceData.Data data = computeFileSourceData.compute(); | |||
assertThat(data.getLineHashes()).isEqualTo("137f72c3708c6bd0de00a0e5a69c699b\n"); | |||
@@ -82,14 +79,12 @@ public class ComputeFileSourceDataTest { | |||
String refLineHashes = new ComputeFileSourceData( | |||
newArrayList("line1").iterator(), | |||
Lists.<LineReader>newArrayList(new MockLineReader()), | |||
1 | |||
).compute().getLineHashes(); | |||
1).compute().getLineHashes(); | |||
assertThat(new ComputeFileSourceData( | |||
newArrayList(" line\t \t 1 ").iterator(), | |||
Lists.<LineReader>newArrayList(new MockLineReader()), | |||
1 | |||
).compute().getLineHashes()).isEqualTo(refLineHashes); | |||
1).compute().getLineHashes()).isEqualTo(refLineHashes); | |||
} | |||
@Test | |||
@@ -97,13 +92,12 @@ public class ComputeFileSourceDataTest { | |||
assertThat(new ComputeFileSourceData( | |||
newArrayList(" ").iterator(), | |||
Lists.<LineReader>newArrayList(new MockLineReader()), | |||
1 | |||
).compute().getLineHashes()).isEqualTo(""); | |||
1).compute().getLineHashes()).isEqualTo(""); | |||
} | |||
private static class MockLineReader implements LineReader { | |||
@Override | |||
public void read(FileSourceDb.Line.Builder lineBuilder) { | |||
public void read(FileSources.Line.Builder lineBuilder) { | |||
lineBuilder.setHighlighting("h-" + lineBuilder.getLine()); | |||
} | |||
} |
@@ -20,11 +20,10 @@ | |||
package org.sonar.server.computation.source; | |||
import java.util.Collections; | |||
import org.junit.Test; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import java.util.Collections; | |||
import org.sonar.db.FileSources; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -43,7 +42,7 @@ public class CoverageLineReaderTest { | |||
.setOverallCoveredConditions(4) | |||
.build()).iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
computeCoverageLine.read(lineBuilder); | |||
assertThat(lineBuilder.getUtLineHits()).isEqualTo(1); | |||
@@ -63,7 +62,7 @@ public class CoverageLineReaderTest { | |||
.setItHits(false) | |||
.build()).iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
computeCoverageLine.read(lineBuilder); | |||
assertThat(lineBuilder.hasUtLineHits()).isTrue(); | |||
@@ -80,7 +79,7 @@ public class CoverageLineReaderTest { | |||
.setLine(1) | |||
.build()).iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
computeCoverageLine.read(lineBuilder); | |||
assertThat(lineBuilder.hasUtLineHits()).isFalse(); | |||
@@ -91,12 +90,12 @@ public class CoverageLineReaderTest { | |||
@Test | |||
public void set_overall_line_hits_with_only_ut() { | |||
CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(BatchReport.Coverage.newBuilder() | |||
.setLine(1) | |||
.setUtHits(true) | |||
.setItHits(false) | |||
.build()).iterator()); | |||
.setLine(1) | |||
.setUtHits(true) | |||
.setItHits(false) | |||
.build()).iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
computeCoverageLine.read(lineBuilder); | |||
assertThat(lineBuilder.getOverallLineHits()).isEqualTo(1); | |||
@@ -110,7 +109,7 @@ public class CoverageLineReaderTest { | |||
.setItHits(true) | |||
.build()).iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
computeCoverageLine.read(lineBuilder); | |||
assertThat(lineBuilder.getOverallLineHits()).isEqualTo(1); | |||
@@ -124,7 +123,7 @@ public class CoverageLineReaderTest { | |||
.setItHits(true) | |||
.build()).iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
computeCoverageLine.read(lineBuilder); | |||
assertThat(lineBuilder.getOverallLineHits()).isEqualTo(1); | |||
@@ -134,7 +133,7 @@ public class CoverageLineReaderTest { | |||
public void nothing_to_do_when_no_coverage_info() { | |||
CoverageLineReader computeCoverageLine = new CoverageLineReader(Collections.<BatchReport.Coverage>emptyList().iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
computeCoverageLine.read(lineBuilder); | |||
assertThat(lineBuilder.hasUtLineHits()).isFalse(); | |||
@@ -158,10 +157,10 @@ public class CoverageLineReaderTest { | |||
.setItCoveredConditions(3) | |||
.setOverallCoveredConditions(4) | |||
.build() | |||
// No coverage info on line 2 | |||
).iterator()); | |||
// No coverage info on line 2 | |||
).iterator()); | |||
FileSourceDb.Line.Builder line2Builder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(2); | |||
FileSources.Line.Builder line2Builder = FileSources.Data.newBuilder().addLinesBuilder().setLine(2); | |||
computeCoverageLine.read(line2Builder); | |||
assertThat(line2Builder.hasUtLineHits()).isFalse(); | |||
@@ -185,12 +184,12 @@ public class CoverageLineReaderTest { | |||
.setItCoveredConditions(3) | |||
.setOverallCoveredConditions(4) | |||
.build() | |||
// No coverage info on line 2 | |||
).iterator()); | |||
// No coverage info on line 2 | |||
).iterator()); | |||
FileSourceDb.Data.Builder fileSourceBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSourceDb.Line.Builder line1Builder = fileSourceBuilder.addLinesBuilder().setLine(1); | |||
FileSourceDb.Line.Builder line2Builder = fileSourceBuilder.addLinesBuilder().setLine(2); | |||
FileSources.Data.Builder fileSourceBuilder = FileSources.Data.newBuilder(); | |||
FileSources.Line.Builder line1Builder = fileSourceBuilder.addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder line2Builder = fileSourceBuilder.addLinesBuilder().setLine(2); | |||
computeCoverageLine.read(line1Builder); | |||
computeCoverageLine.read(line2Builder); | |||
@@ -24,20 +24,17 @@ import com.google.common.collect.Iterators; | |||
import org.junit.Test; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.core.util.CloseableIterator; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import java.util.Collections; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
public class DuplicationLineReaderTest { | |||
FileSourceDb.Data.Builder sourceData = FileSourceDb.Data.newBuilder(); | |||
FileSourceDb.Line.Builder line1 = sourceData.addLinesBuilder().setSource("line1").setLine(1); | |||
FileSourceDb.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line2").setLine(2); | |||
FileSourceDb.Line.Builder line3 = sourceData.addLinesBuilder().setSource("line3").setLine(3); | |||
FileSourceDb.Line.Builder line4 = sourceData.addLinesBuilder().setSource("line4").setLine(4); | |||
FileSources.Data.Builder sourceData = FileSources.Data.newBuilder(); | |||
FileSources.Line.Builder line1 = sourceData.addLinesBuilder().setSource("line1").setLine(1); | |||
FileSources.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line2").setLine(2); | |||
FileSources.Line.Builder line3 = sourceData.addLinesBuilder().setSource("line3").setLine(3); | |||
FileSources.Line.Builder line4 = sourceData.addLinesBuilder().setSource("line4").setLine(4); | |||
@Test | |||
public void read_nothing() { | |||
@@ -62,8 +59,7 @@ public class DuplicationLineReaderTest { | |||
.setEndLine(4) | |||
.build()) | |||
.build()) | |||
.build() | |||
)); | |||
.build())); | |||
reader.read(line1); | |||
reader.read(line2); | |||
@@ -91,8 +87,7 @@ public class DuplicationLineReaderTest { | |||
.setEndLine(4) | |||
.build()) | |||
.build()) | |||
.build() | |||
)); | |||
.build())); | |||
reader.read(line1); | |||
reader.read(line2); | |||
@@ -120,8 +115,7 @@ public class DuplicationLineReaderTest { | |||
.setEndLine(4) | |||
.build()) | |||
.build()) | |||
.build() | |||
)); | |||
.build())); | |||
reader.read(line1); | |||
reader.read(line2); | |||
@@ -160,8 +154,7 @@ public class DuplicationLineReaderTest { | |||
.setEndLine(4) | |||
.build()) | |||
.build()) | |||
.build() | |||
)); | |||
.build())); | |||
reader.read(line1); | |||
reader.read(line2); | |||
@@ -200,8 +193,7 @@ public class DuplicationLineReaderTest { | |||
.setEndLine(3) | |||
.build()) | |||
.build()) | |||
.build() | |||
)); | |||
.build())); | |||
reader.read(line1); | |||
reader.read(line2); | |||
@@ -240,8 +232,7 @@ public class DuplicationLineReaderTest { | |||
.setEndLine(4) | |||
.build()) | |||
.build()) | |||
.build() | |||
)); | |||
.build())); | |||
reader.read(line1); | |||
reader.read(line2); |
@@ -20,12 +20,11 @@ | |||
package org.sonar.server.computation.source; | |||
import java.util.Collections; | |||
import org.junit.Test; | |||
import org.sonar.batch.protocol.Constants; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import java.util.Collections; | |||
import org.sonar.db.FileSources; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -33,17 +32,17 @@ import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; | |||
public class HighlightingLineReaderTest { | |||
FileSourceDb.Data.Builder sourceData = FileSourceDb.Data.newBuilder(); | |||
FileSourceDb.Line.Builder line1 = sourceData.addLinesBuilder().setSource("line1").setLine(1); | |||
FileSourceDb.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line2").setLine(2); | |||
FileSourceDb.Line.Builder line3 = sourceData.addLinesBuilder().setSource("line3").setLine(3); | |||
FileSourceDb.Line.Builder line4 = sourceData.addLinesBuilder().setSource("line4").setLine(4); | |||
FileSources.Data.Builder sourceData = FileSources.Data.newBuilder(); | |||
FileSources.Line.Builder line1 = sourceData.addLinesBuilder().setSource("line1").setLine(1); | |||
FileSources.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line2").setLine(2); | |||
FileSources.Line.Builder line3 = sourceData.addLinesBuilder().setSource("line3").setLine(3); | |||
FileSources.Line.Builder line4 = sourceData.addLinesBuilder().setSource("line4").setLine(4); | |||
@Test | |||
public void nothing_to_read() { | |||
HighlightingLineReader highlightingLineReader = new HighlightingLineReader(Collections.<BatchReport.SyntaxHighlighting>emptyList().iterator()); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
highlightingLineReader.read(lineBuilder); | |||
assertThat(lineBuilder.hasHighlighting()).isFalse(); | |||
@@ -58,8 +57,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(2).setEndOffset(4) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
highlightingLineReader.read(line1); | |||
@@ -89,8 +87,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(1).setEndOffset(2) | |||
.build()) | |||
.setType(Constants.HighlightingType.CONSTANT) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
highlightingLineReader.read(line1); | |||
highlightingLineReader.read(line2); | |||
@@ -118,8 +115,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(4).setEndOffset(5) | |||
.build()) | |||
.setType(Constants.HighlightingType.COMMENT) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
highlightingLineReader.read(line1); | |||
@@ -143,8 +139,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(2).setEndOffset(3) | |||
.build()) | |||
.setType(Constants.HighlightingType.KEYWORD) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
highlightingLineReader.read(line1); | |||
@@ -161,11 +156,10 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(3).setEndOffset(2) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
highlightingLineReader.read(line1); | |||
FileSourceDb.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line 2").setLine(2); | |||
FileSources.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line 2").setLine(2); | |||
highlightingLineReader.read(line2); | |||
highlightingLineReader.read(line3); | |||
@@ -197,8 +191,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(1).setEndOffset(2) | |||
.build()) | |||
.setType(Constants.HighlightingType.COMMENT) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
highlightingLineReader.read(line1); | |||
highlightingLineReader.read(line2); | |||
@@ -220,8 +213,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(0).setEndOffset(0) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
highlightingLineReader.read(line1); | |||
highlightingLineReader.read(line2); | |||
@@ -242,8 +234,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(4).setEndOffset(2) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
try { | |||
highlightingLineReader.read(line1); | |||
@@ -262,8 +253,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(2).setEndOffset(10) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
try { | |||
highlightingLineReader.read(line1); | |||
@@ -282,8 +272,7 @@ public class HighlightingLineReaderTest { | |||
.setStartOffset(10).setEndOffset(11) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
).iterator()); | |||
.build()).iterator()); | |||
try { | |||
highlightingLineReader.read(line1); |
@@ -22,7 +22,7 @@ package org.sonar.server.computation.source; | |||
import org.junit.Test; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; | |||
@@ -42,7 +42,7 @@ public class ScmLineReaderTest { | |||
ScmLineReader lineScm = new ScmLineReader(scmReport); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
lineScm.read(lineBuilder); | |||
assertThat(lineBuilder.getScmAuthor()).isEqualTo("john"); | |||
@@ -61,7 +61,7 @@ public class ScmLineReaderTest { | |||
ScmLineReader lineScm = new ScmLineReader(scmReport); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
lineScm.read(lineBuilder); | |||
assertThat(lineBuilder.getScmAuthor()).isEqualTo("john"); | |||
@@ -80,7 +80,7 @@ public class ScmLineReaderTest { | |||
ScmLineReader lineScm = new ScmLineReader(scmReport); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
lineScm.read(lineBuilder); | |||
assertThat(lineBuilder.hasScmAuthor()).isFalse(); | |||
@@ -99,7 +99,7 @@ public class ScmLineReaderTest { | |||
ScmLineReader lineScm = new ScmLineReader(scmReport); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
lineScm.read(lineBuilder); | |||
assertThat(lineBuilder.hasScmAuthor()).isFalse(); | |||
@@ -117,7 +117,7 @@ public class ScmLineReaderTest { | |||
ScmLineReader lineScm = new ScmLineReader(scmReport); | |||
FileSourceDb.Line.Builder lineBuilder = FileSourceDb.Data.newBuilder().addLinesBuilder().setLine(1); | |||
FileSources.Line.Builder lineBuilder = FileSources.Data.newBuilder().addLinesBuilder().setLine(1); | |||
try { | |||
lineScm.read(lineBuilder); | |||
failBecauseExceptionWasNotThrown(IllegalArgumentException.class); |
@@ -20,23 +20,22 @@ | |||
package org.sonar.server.computation.source; | |||
import java.util.Collections; | |||
import java.util.List; | |||
import org.junit.Test; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.core.util.CloseableIterator; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
public class SymbolsLineReaderTest { | |||
FileSourceDb.Data.Builder sourceData = FileSourceDb.Data.newBuilder(); | |||
FileSourceDb.Line.Builder line1 = sourceData.addLinesBuilder().setSource("line1").setLine(1); | |||
FileSourceDb.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line2").setLine(2); | |||
FileSourceDb.Line.Builder line3 = sourceData.addLinesBuilder().setSource("line3").setLine(3); | |||
FileSourceDb.Line.Builder line4 = sourceData.addLinesBuilder().setSource("line4").setLine(4); | |||
FileSources.Data.Builder sourceData = FileSources.Data.newBuilder(); | |||
FileSources.Line.Builder line1 = sourceData.addLinesBuilder().setSource("line1").setLine(1); | |||
FileSources.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line2").setLine(2); | |||
FileSources.Line.Builder line3 = sourceData.addLinesBuilder().setSource("line3").setLine(3); | |||
FileSources.Line.Builder line4 = sourceData.addLinesBuilder().setSource("line4").setLine(4); | |||
@Test | |||
public void read_nothing() { | |||
@@ -57,8 +56,7 @@ public class SymbolsLineReaderTest { | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(3).setEndLine(3).setStartOffset(1).setEndOffset(3) | |||
.build()) | |||
.build() | |||
); | |||
.build()); | |||
SymbolsLineReader symbolsLineReader = new SymbolsLineReader(symbols.iterator()); | |||
symbolsLineReader.read(line1); | |||
@@ -80,8 +78,7 @@ public class SymbolsLineReaderTest { | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(1).setEndLine(1).setStartOffset(2).setEndOffset(3) | |||
.build()) | |||
.build() | |||
); | |||
.build()); | |||
SymbolsLineReader symbolsLineReader = new SymbolsLineReader(symbols.iterator()); | |||
symbolsLineReader.read(line1); | |||
@@ -102,8 +99,7 @@ public class SymbolsLineReaderTest { | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(2).setEndLine(2).setStartOffset(0).setEndOffset(2) | |||
.build()) | |||
.build() | |||
); | |||
.build()); | |||
SymbolsLineReader symbolsLineReader = new SymbolsLineReader(symbols.iterator()); | |||
symbolsLineReader.read(line1); | |||
@@ -128,8 +124,7 @@ public class SymbolsLineReaderTest { | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(2).setEndLine(2).setStartOffset(2).setEndOffset(3) | |||
.build()) | |||
.build() | |||
); | |||
.build()); | |||
SymbolsLineReader symbolsLineReader = new SymbolsLineReader(symbols.iterator()); | |||
symbolsLineReader.read(line1); | |||
@@ -149,8 +144,7 @@ public class SymbolsLineReaderTest { | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(1).setEndLine(1).setStartOffset(1).setEndOffset(2) | |||
.build()) | |||
.build() | |||
); | |||
.build()); | |||
SymbolsLineReader symbolsLineReader = new SymbolsLineReader(symbols.iterator()); | |||
symbolsLineReader.read(line1); | |||
@@ -178,8 +172,7 @@ public class SymbolsLineReaderTest { | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(3).setEndLine(3).setStartOffset(0).setEndOffset(1) | |||
.build()) | |||
.build() | |||
); | |||
.build()); | |||
SymbolsLineReader symbolsLineReader = new SymbolsLineReader(symbols.iterator()); | |||
symbolsLineReader.read(line1); | |||
@@ -287,8 +280,7 @@ public class SymbolsLineReaderTest { | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(3).setEndLine(3).setStartOffset(1).setEndOffset(3) | |||
.build()) | |||
.build() | |||
); | |||
.build()); | |||
SymbolsLineReader symbolsLineReader = new SymbolsLineReader(symbols.iterator()); | |||
symbolsLineReader.read(line1); |
@@ -33,6 +33,7 @@ import org.sonar.batch.protocol.Constants; | |||
import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.db.source.FileSourceDto.Type; | |||
import org.sonar.server.computation.batch.BatchReportReaderRule; | |||
@@ -40,7 +41,6 @@ import org.sonar.server.computation.batch.TreeRootHolderRule; | |||
import org.sonar.server.computation.component.Component; | |||
import org.sonar.server.computation.component.DumbComponent; | |||
import org.sonar.server.computation.language.LanguageRepository; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.test.DbTests; | |||
import static com.google.common.collect.Lists.newArrayList; | |||
@@ -105,7 +105,7 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
assertThat(fileSourceDto.getCreatedAt()).isEqualTo(now); | |||
assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(now); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
assertThat(data.getLinesCount()).isEqualTo(2); | |||
assertThat(data.getLines(0).getLine()).isEqualTo(1); | |||
assertThat(data.getLines(0).getSource()).isEqualTo("line1"); | |||
@@ -127,7 +127,7 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
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 | |||
// Lines is set to 3 but only 2 lines are read from the file -> the last lines should be added | |||
.setLines(3) | |||
.build()); | |||
reportReader.putFileSourceLines(FILE_REF, "line1", "line2"); | |||
@@ -136,7 +136,7 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); | |||
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
assertThat(data.getLinesCount()).isEqualTo(3); | |||
assertThat(data.getLines(2).getLine()).isEqualTo(3); | |||
assertThat(data.getLines(2).getSource()).isEmpty(); | |||
@@ -172,7 +172,7 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); | |||
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
assertThat(data.getLinesList()).hasSize(1); | |||
@@ -205,7 +205,7 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); | |||
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
assertThat(data.getLinesList()).hasSize(1); | |||
@@ -219,19 +219,18 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
initBasicReport(1); | |||
reportReader.putSyntaxHighlighting(FILE_REF, newArrayList(BatchReport.SyntaxHighlighting.newBuilder() | |||
.setRange(BatchReport.Range.newBuilder() | |||
.setStartLine(1).setEndLine(1) | |||
.setStartOffset(2).setEndOffset(4) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
)); | |||
.setRange(BatchReport.Range.newBuilder() | |||
.setStartLine(1).setEndLine(1) | |||
.setStartOffset(2).setEndOffset(4) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build())); | |||
underTest.execute(); | |||
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); | |||
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
assertThat(data.getLinesList()).hasSize(1); | |||
@@ -248,16 +247,15 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
.setStartLine(1).setEndLine(1).setStartOffset(2).setEndOffset(4) | |||
.build()) | |||
.addReference(BatchReport.Range.newBuilder() | |||
.setStartLine(3).setEndLine(3).setStartOffset(1).setEndOffset(3) | |||
.build() | |||
).build() | |||
)); | |||
.setStartLine(3).setEndLine(3).setStartOffset(1).setEndOffset(3) | |||
.build()) | |||
.build())); | |||
underTest.execute(); | |||
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); | |||
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
assertThat(data.getLinesList()).hasSize(3); | |||
@@ -282,14 +280,13 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
.setEndLine(4) | |||
.build()) | |||
.build()) | |||
.build() | |||
)); | |||
.build())); | |||
underTest.execute(); | |||
assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); | |||
FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectSource(FILE_UUID); | |||
FileSourceDb.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
FileSources.Data data = FileSourceDto.decodeSourceData(fileSourceDto.getBinaryData()); | |||
assertThat(data.getLinesList()).hasSize(1); | |||
@@ -310,8 +307,8 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
.setSrcHash(srcHash) | |||
.setLineHashes(lineHashes) | |||
.setDataHash(dataHash) | |||
.setSourceData(FileSourceDb.Data.newBuilder() | |||
.addLines(FileSourceDb.Line.newBuilder() | |||
.setSourceData(FileSources.Data.newBuilder() | |||
.addLines(FileSources.Line.newBuilder() | |||
.setLine(1) | |||
.setSource("line1") | |||
.build()) | |||
@@ -345,8 +342,8 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
.setSrcHash("5b4bd9815cdb17b8ceae19eb1810c34c") | |||
.setLineHashes("6438c669e0d0de98e6929c2cc0fac474\n") | |||
.setDataHash("6cad150e3d065976c230cddc5a09efaa") | |||
.setSourceData(FileSourceDb.Data.newBuilder() | |||
.addLines(FileSourceDb.Line.newBuilder() | |||
.setSourceData(FileSources.Data.newBuilder() | |||
.addLines(FileSources.Line.newBuilder() | |||
.setLine(1) | |||
.setSource("old line") | |||
.build()) | |||
@@ -373,11 +370,11 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
.setProjectUuid(PROJECT_UUID) | |||
.setFileUuid(FILE_UUID) | |||
.setDataType(Type.SOURCE) | |||
// Source hash is missing, update will be made | |||
// Source hash is missing, update will be made | |||
.setLineHashes("137f72c3708c6bd0de00a0e5a69c699b") | |||
.setDataHash("29f25900140c94db38035128cb6de6a2") | |||
.setSourceData(FileSourceDb.Data.newBuilder() | |||
.addLines(FileSourceDb.Line.newBuilder() | |||
.setSourceData(FileSources.Data.newBuilder() | |||
.addLines(FileSources.Line.newBuilder() | |||
.setLine(1) | |||
.setSource("line") | |||
.build()) | |||
@@ -403,14 +400,13 @@ public class PersistFileSourcesStepTest extends BaseStepTest { | |||
initBasicReport(1); | |||
reportReader.putSyntaxHighlighting(FILE_REF, newArrayList(BatchReport.SyntaxHighlighting.newBuilder() | |||
.setRange(BatchReport.Range.newBuilder() | |||
.setStartLine(1).setEndLine(1) | |||
// Wrong offset -> fail | |||
.setStartOffset(4).setEndOffset(2) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build() | |||
)); | |||
.setRange(BatchReport.Range.newBuilder() | |||
.setStartLine(1).setEndLine(1) | |||
// Wrong offset -> fail | |||
.setStartOffset(4).setEndOffset(2) | |||
.build()) | |||
.setType(Constants.HighlightingType.ANNOTATION) | |||
.build())); | |||
try { | |||
underTest.execute(); |
@@ -33,13 +33,13 @@ import org.sonar.batch.protocol.output.BatchReport; | |||
import org.sonar.batch.protocol.output.BatchReport.CoverageDetail; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.server.computation.batch.BatchReportReaderRule; | |||
import org.sonar.server.computation.batch.TreeRootHolderRule; | |||
import org.sonar.server.computation.component.Component; | |||
import org.sonar.server.computation.component.DumbComponent; | |||
import org.sonar.server.computation.component.FileAttributes; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.assertj.core.api.Assertions.tuple; | |||
@@ -91,9 +91,8 @@ public class PersistTestsStepTest extends BaseStepTest { | |||
DumbComponent.builder(Component.Type.FILE, 3).setUuid(TEST_FILE_UUID_1).setKey("TEST_FILE1_KEY").setFileAttributes(new FileAttributes(true, null)).build(), | |||
DumbComponent.builder(Component.Type.FILE, 4).setUuid(TEST_FILE_UUID_2).setKey("TEST_FILE2_KEY").setFileAttributes(new FileAttributes(true, null)).build(), | |||
DumbComponent.builder(Component.Type.FILE, 5).setUuid(MAIN_FILE_UUID_1).setKey("MAIN_FILE1_KEY").build(), | |||
DumbComponent.builder(Component.Type.FILE, 6).setUuid(MAIN_FILE_UUID_2).setKey("MAIN_FILE2_KEY").build() | |||
).build() | |||
).build(); | |||
DumbComponent.builder(Component.Type.FILE, 6).setUuid(MAIN_FILE_UUID_2).setKey("MAIN_FILE2_KEY").build()).build()) | |||
.build(); | |||
treeRootHolder.setRoot(root); | |||
} | |||
@@ -113,12 +112,10 @@ public class PersistTestsStepTest extends BaseStepTest { | |||
@Test | |||
public void insert_several_tests_in_a_report() { | |||
List<BatchReport.Test> batchTests = Arrays.asList( | |||
newTest(1), newTest(2) | |||
); | |||
newTest(1), newTest(2)); | |||
reportReader.putTests(TEST_FILE_REF_1, batchTests); | |||
List<CoverageDetail> coverageDetails = Arrays.asList( | |||
newCoverageDetail(1, MAIN_FILE_REF_1) | |||
); | |||
newCoverageDetail(1, MAIN_FILE_REF_1)); | |||
reportReader.putCoverageDetails(TEST_FILE_REF_1, coverageDetails); | |||
underTest.execute(); | |||
@@ -153,12 +150,12 @@ public class PersistTestsStepTest extends BaseStepTest { | |||
assertThat(dto.getFileUuid()).isEqualTo(TEST_FILE_UUID_1); | |||
assertThat(dto.getTestData()).hasSize(1); | |||
FileSourceDb.Test test1 = dto.getTestData().get(0); | |||
FileSources.Test test1 = dto.getTestData().get(0); | |||
assertThat(test1.getUuid()).isNotEmpty(); | |||
assertThat(test1.getName()).isEqualTo("name#1"); | |||
assertThat(test1.getMsg()).isEqualTo("message#1"); | |||
assertThat(test1.getStacktrace()).isEqualTo("stacktrace#1"); | |||
assertThat(test1.getStatus()).isEqualTo(FileSourceDb.Test.TestStatus.FAILURE); | |||
assertThat(test1.getStatus()).isEqualTo(FileSources.Test.TestStatus.FAILURE); | |||
assertThat(test1.getExecutionTimeMs()).isEqualTo(1_000); | |||
assertThat(test1.getCoveredFileCount()).isEqualTo(1); | |||
assertThat(test1.getCoveredFile(0).getCoveredLineList()).containsOnly(1, 2, 3); | |||
@@ -174,7 +171,7 @@ public class PersistTestsStepTest extends BaseStepTest { | |||
FileSourceDto dto = dbClient.fileSourceDao().selectTest(TEST_FILE_UUID_1); | |||
assertThat(dto.getFileUuid()).isEqualTo(TEST_FILE_UUID_1); | |||
List<FileSourceDb.Test> tests = dto.getTestData(); | |||
List<FileSources.Test> tests = dto.getTestData(); | |||
assertThat(tests).hasSize(1); | |||
assertThat(tests.get(0).getCoveredFileList()).isEmpty(); | |||
assertThat(tests.get(0).getMsg()).isEqualTo("message#1"); | |||
@@ -218,10 +215,10 @@ public class PersistTestsStepTest extends BaseStepTest { | |||
dbClient.fileSourceDao().insert(db.getSession(), new FileSourceDto() | |||
.setProjectUuid(PROJECT_UUID) | |||
.setFileUuid(TEST_FILE_UUID_1) | |||
.setTestData(Arrays.asList(FileSourceDb.Test.newBuilder() | |||
.setTestData(Arrays.asList(FileSources.Test.newBuilder() | |||
.setUuid("test-uuid-1") | |||
.setName("name#1") | |||
.setStatus(FileSourceDb.Test.TestStatus.ERROR) | |||
.setStatus(FileSources.Test.TestStatus.ERROR) | |||
.setStacktrace("old-stacktrace#1") | |||
.setMsg("old-message#1") | |||
.setExecutionTimeMs(987_654_321L) | |||
@@ -246,10 +243,10 @@ public class PersistTestsStepTest extends BaseStepTest { | |||
assertThat(dto.getUpdatedAt()).isEqualTo(now); | |||
assertThat(dto.getTestData()).hasSize(1); | |||
FileSourceDb.Test test = dto.getTestData().get(0); | |||
FileSources.Test test = dto.getTestData().get(0); | |||
assertThat(test.getUuid()).isNotEqualTo("test-uuid-1"); | |||
assertThat(test.getName()).isEqualTo("name#1"); | |||
assertThat(test.getStatus()).isEqualTo(FileSourceDb.Test.TestStatus.valueOf(newBatchTest.getStatus().name())); | |||
assertThat(test.getStatus()).isEqualTo(FileSources.Test.TestStatus.valueOf(newBatchTest.getStatus().name())); | |||
assertThat(test.getMsg()).isEqualTo(newBatchTest.getMsg()); | |||
assertThat(test.getStacktrace()).isEqualTo(newBatchTest.getStacktrace()); | |||
assertThat(test.getExecutionTimeMs()).isEqualTo(newBatchTest.getDurationInMs()); | |||
@@ -276,10 +273,9 @@ public class PersistTestsStepTest extends BaseStepTest { | |||
return CoverageDetail.newBuilder() | |||
.setTestName("name#" + id) | |||
.addCoveredFile(CoverageDetail.CoveredFile.newBuilder() | |||
.addAllCoveredLine(Arrays.asList(lines)) | |||
.setFileRef(covered_file_ref) | |||
.build() | |||
) | |||
.addAllCoveredLine(Arrays.asList(lines)) | |||
.setFileRef(covered_file_ref) | |||
.build()) | |||
.build(); | |||
} | |||
} |
@@ -42,6 +42,7 @@ import org.sonar.core.issue.workflow.Transition; | |||
import org.sonar.core.permission.GlobalPermissions; | |||
import org.sonar.db.DbClient; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.component.ComponentDao; | |||
import org.sonar.db.component.ComponentDto; | |||
import org.sonar.db.issue.ActionPlanDto; | |||
@@ -62,7 +63,6 @@ import org.sonar.server.issue.index.IssueIndexer; | |||
import org.sonar.server.permission.InternalPermissionService; | |||
import org.sonar.server.permission.PermissionChange; | |||
import org.sonar.server.rule.db.RuleDao; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper; | |||
import org.sonar.server.source.index.SourceLineIndexer; | |||
import org.sonar.server.source.index.SourceLineResultSetIterator; | |||
@@ -608,7 +608,7 @@ public class IssueServiceMediumTest { | |||
} | |||
private void newSourceLine(ComponentDto file, int line, String scmAuthor) { | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
dataBuilder.addLinesBuilder() | |||
.setLine(line) | |||
.setScmAuthor(scmAuthor) |
@@ -26,8 +26,8 @@ import java.sql.SQLException; | |||
import java.util.Arrays; | |||
import org.apache.commons.lang.RandomStringUtils; | |||
import org.apache.commons.lang.math.RandomUtils; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
public class FileSourceTesting { | |||
@@ -35,7 +35,7 @@ public class FileSourceTesting { | |||
// only static stuff | |||
} | |||
public static void updateDataColumn(Connection connection, String fileUuid, FileSourceDb.Data data) throws SQLException { | |||
public static void updateDataColumn(Connection connection, String fileUuid, FileSources.Data data) throws SQLException { | |||
updateDataColumn(connection, fileUuid, FileSourceDto.encodeSourceData(data)); | |||
} | |||
@@ -50,8 +50,8 @@ public class FileSourceTesting { | |||
/** | |||
* Generate predefined fake data. Result is mutable. | |||
*/ | |||
public static FileSourceDb.Data.Builder newFakeData(int numberOfLines) throws IOException { | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
public static FileSources.Data.Builder newFakeData(int numberOfLines) throws IOException { | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
for (int i = 1; i <= numberOfLines; i++) { | |||
dataBuilder.addLinesBuilder() | |||
.setLine(i) | |||
@@ -79,8 +79,8 @@ public class FileSourceTesting { | |||
/** | |||
* Generate random data. Result is mutable. | |||
*/ | |||
public static FileSourceDb.Data.Builder newRandomData(int numberOfLines) throws IOException { | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
public static FileSources.Data.Builder newRandomData(int numberOfLines) throws IOException { | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
for (int i = 1; i <= numberOfLines; i++) { | |||
dataBuilder.addLinesBuilder() | |||
.setLine(i) |
@@ -40,9 +40,9 @@ import org.sonar.api.config.Settings; | |||
import org.sonar.api.utils.DateUtils; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.server.db.DbClient; | |||
import org.sonar.server.es.EsTester; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.test.DbTests; | |||
import org.sonar.test.TestUtils; | |||
@@ -131,7 +131,7 @@ public class SourceLineIndexerTest { | |||
indexLine("P1", "F2", 1); | |||
List<Integer> duplications = ImmutableList.of(1, 2, 3); | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
dataBuilder.addLinesBuilder() | |||
.setLine(1) | |||
.setScmRevision("new_revision") | |||
@@ -156,8 +156,7 @@ public class SourceLineIndexerTest { | |||
entry(FIELD_SCM_REVISION, "new_revision"), | |||
entry(FIELD_SCM_AUTHOR, "new_author"), | |||
entry(FIELD_SOURCE, "new source"), | |||
entry(FIELD_DUPLICATIONS, duplications) | |||
); | |||
entry(FIELD_DUPLICATIONS, duplications)); | |||
} | |||
@Test | |||
@@ -195,7 +194,7 @@ public class SourceLineIndexerTest { | |||
public void index_source_lines_with_big_test_data() { | |||
Integer bigValue = Short.MAX_VALUE * 2; | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
dataBuilder.addLinesBuilder() | |||
.setLine(1) | |||
.setScmRevision("cafebabe") |
@@ -28,7 +28,7 @@ import org.junit.Test; | |||
import org.junit.experimental.categories.Category; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.test.DbTests; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -81,8 +81,7 @@ public class SourceLineResultSetIteratorTest { | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_IT_COVERED_CONDITIONS, 6), | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_OVERALL_LINE_HITS, 7), | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_OVERALL_CONDITIONS, 8), | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_OVERALL_COVERED_CONDITIONS, 9) | |||
); | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_OVERALL_COVERED_CONDITIONS, 9)); | |||
} | |||
/** | |||
@@ -91,7 +90,7 @@ public class SourceLineResultSetIteratorTest { | |||
@Test | |||
public void minimal_data() throws Exception { | |||
db.prepareDbUnit(getClass(), "shared.xml"); | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
dataBuilder.addLinesBuilder().setLine(1).build(); | |||
try (Connection connection = db.openConnection()) { | |||
FileSourceTesting.updateDataColumn(connection, "F1", dataBuilder.build()); | |||
@@ -108,8 +107,7 @@ public class SourceLineResultSetIteratorTest { | |||
assertThat(doc).contains( | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_PROJECT_UUID, "P1"), | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_FILE_UUID, "F1"), | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_LINE, 1) | |||
); | |||
MapEntry.entry(SourceLineIndexDefinition.FIELD_LINE, 1)); | |||
// null values | |||
assertThat(doc).containsKeys( | |||
SourceLineIndexDefinition.FIELD_SCM_REVISION, | |||
@@ -124,8 +122,7 @@ public class SourceLineResultSetIteratorTest { | |||
SourceLineIndexDefinition.FIELD_IT_COVERED_CONDITIONS, | |||
SourceLineIndexDefinition.FIELD_OVERALL_LINE_HITS, | |||
SourceLineIndexDefinition.FIELD_OVERALL_CONDITIONS, | |||
SourceLineIndexDefinition.FIELD_OVERALL_COVERED_CONDITIONS | |||
); | |||
SourceLineIndexDefinition.FIELD_OVERALL_COVERED_CONDITIONS); | |||
} | |||
@Test | |||
@@ -139,7 +136,7 @@ public class SourceLineResultSetIteratorTest { | |||
@Test | |||
public void filter_by_project() throws Exception { | |||
db.prepareDbUnit(getClass(), "filter_by_project.xml"); | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
dataBuilder.addLinesBuilder().setLine(1).build(); | |||
try (Connection connection = db.openConnection()) { | |||
FileSourceTesting.updateDataColumn(connection, "F1", dataBuilder.build()); | |||
@@ -158,7 +155,7 @@ public class SourceLineResultSetIteratorTest { | |||
@Test | |||
public void filter_by_project_and_date() throws Exception { | |||
db.prepareDbUnit(getClass(), "filter_by_project_and_date.xml"); | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
dataBuilder.addLinesBuilder().setLine(1).build(); | |||
try (Connection connection = db.openConnection()) { | |||
FileSourceTesting.updateDataColumn(connection, "F1", dataBuilder.build()); |
@@ -20,20 +20,18 @@ | |||
package org.sonar.server.test.db; | |||
import org.apache.commons.lang.RandomStringUtils; | |||
import org.apache.commons.lang.math.RandomUtils; | |||
import org.sonar.api.utils.internal.Uuids; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.db.FileSourceDb.Test.TestStatus; | |||
import java.io.IOException; | |||
import java.sql.Connection; | |||
import java.sql.PreparedStatement; | |||
import java.sql.SQLException; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import org.apache.commons.lang.RandomStringUtils; | |||
import org.apache.commons.lang.math.RandomUtils; | |||
import org.sonar.api.utils.internal.Uuids; | |||
import org.sonar.db.DbSession; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.source.FileSourceDto; | |||
public class TestTesting { | |||
@@ -41,7 +39,7 @@ public class TestTesting { | |||
// only static stuff | |||
} | |||
public static void updateDataColumn(DbSession session, String fileUuid, List<FileSourceDb.Test> tests) throws SQLException { | |||
public static void updateDataColumn(DbSession session, String fileUuid, List<FileSources.Test> tests) throws SQLException { | |||
updateDataColumn(session, fileUuid, FileSourceDto.encodeTestData(tests)); | |||
} | |||
@@ -58,22 +56,21 @@ public class TestTesting { | |||
/** | |||
* Generate random data. | |||
*/ | |||
public static List<FileSourceDb.Test> newRandomTests(int numberOfTests) throws IOException { | |||
List<FileSourceDb.Test> tests = new ArrayList<>(); | |||
public static List<FileSources.Test> newRandomTests(int numberOfTests) throws IOException { | |||
List<FileSources.Test> tests = new ArrayList<>(); | |||
for (int i = 1; i <= numberOfTests; i++) { | |||
FileSourceDb.Test.Builder test = FileSourceDb.Test.newBuilder() | |||
FileSources.Test.Builder test = FileSources.Test.newBuilder() | |||
.setUuid(Uuids.create()) | |||
.setName(RandomStringUtils.randomAlphanumeric(20)) | |||
.setStatus(TestStatus.FAILURE) | |||
.setStatus(FileSources.Test.TestStatus.FAILURE) | |||
.setStacktrace(RandomStringUtils.randomAlphanumeric(50)) | |||
.setMsg(RandomStringUtils.randomAlphanumeric(30)) | |||
.setExecutionTimeMs(RandomUtils.nextLong()); | |||
for (int j = 0; j < numberOfTests; j++) { | |||
test.addCoveredFile( | |||
FileSourceDb.Test.CoveredFile.newBuilder() | |||
FileSources.Test.CoveredFile.newBuilder() | |||
.setFileUuid(Uuids.create()) | |||
.addCoveredLine(RandomUtils.nextInt(500)) | |||
); | |||
.addCoveredLine(RandomUtils.nextInt(500))); | |||
} | |||
tests.add(test.build()); | |||
} |
@@ -39,10 +39,9 @@ import org.junit.experimental.categories.Category; | |||
import org.sonar.api.config.Settings; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.server.db.DbClient; | |||
import org.sonar.server.es.EsTester; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.db.FileSourceDb.Test.TestStatus; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper; | |||
import org.sonar.server.test.db.TestTesting; | |||
import org.sonar.test.DbTests; | |||
@@ -121,16 +120,15 @@ public class TestIndexerTest { | |||
indexTest("P1", "F2", "T1", "U121"); | |||
FileSourcesUpdaterHelper.Row dbRow = TestResultSetIterator.toRow("P1", "F1", new Date(), Arrays.asList( | |||
FileSourceDb.Test.newBuilder() | |||
FileSources.Test.newBuilder() | |||
.setUuid("U111") | |||
.setName("NAME_1") | |||
.setStatus(TestStatus.FAILURE) | |||
.setStatus(FileSources.Test.TestStatus.FAILURE) | |||
.setMsg("NEW_MESSAGE_1") | |||
.setStacktrace("NEW_STACKTRACE_1") | |||
.setExecutionTimeMs(123_456L) | |||
.addCoveredFile(FileSourceDb.Test.CoveredFile.newBuilder().setFileUuid("MAIN_UUID_1").addCoveredLine(42)) | |||
.build() | |||
)); | |||
.addCoveredFile(FileSources.Test.CoveredFile.newBuilder().setFileUuid("MAIN_UUID_1").addCoveredLine(42)) | |||
.build())); | |||
underTest.index(Iterators.singletonIterator(dbRow)); | |||
assertThat(countDocuments()).isEqualTo(2L); | |||
@@ -148,8 +146,7 @@ public class TestIndexerTest { | |||
entry(FIELD_STATUS, "FAILURE"), | |||
entry(FIELD_MESSAGE, "NEW_MESSAGE_1"), | |||
entry(FIELD_STACKTRACE, "NEW_STACKTRACE_1"), | |||
entry(FIELD_DURATION_IN_MS, 123_456) | |||
); | |||
entry(FIELD_DURATION_IN_MS, 123_456)); | |||
} | |||
@Test |
@@ -32,8 +32,7 @@ import org.junit.Test; | |||
import org.junit.experimental.categories.Category; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.db.FileSourceDb.Test.TestStatus; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.server.source.index.FileSourcesUpdaterHelper; | |||
import org.sonar.server.test.db.TestTesting; | |||
import org.sonar.test.DbTests; | |||
@@ -78,8 +77,7 @@ public class TestResultSetIteratorTest { | |||
MapEntry.entry(TestIndexDefinition.FIELD_MESSAGE, "MESSAGE_1"), | |||
MapEntry.entry(TestIndexDefinition.FIELD_DURATION_IN_MS, 1), | |||
MapEntry.entry(TestIndexDefinition.FIELD_STACKTRACE, "STACKTRACE_1"), | |||
MapEntry.entry(TestIndexDefinition.FIELD_NAME, "NAME_1") | |||
); | |||
MapEntry.entry(TestIndexDefinition.FIELD_NAME, "NAME_1")); | |||
} | |||
/** | |||
@@ -88,12 +86,11 @@ public class TestResultSetIteratorTest { | |||
@Test | |||
public void minimal_data() throws Exception { | |||
dbTester.prepareDbUnit(getClass(), "shared.xml"); | |||
List<FileSourceDb.Test> tests = Arrays.asList( | |||
FileSourceDb.Test.newBuilder() | |||
List<FileSources.Test> tests = Arrays.asList( | |||
FileSources.Test.newBuilder() | |||
.setUuid("U1") | |||
.setName("N1") | |||
.build() | |||
); | |||
.build()); | |||
TestTesting.updateDataColumn(dbTester.getSession(), "F1", tests); | |||
underTest = TestResultSetIterator.create(dbTester.getDbClient(), dbTester.getSession(), 0L, null); | |||
@@ -109,16 +106,14 @@ public class TestResultSetIteratorTest { | |||
MapEntry.entry(TestIndexDefinition.FIELD_PROJECT_UUID, "P1"), | |||
MapEntry.entry(TestIndexDefinition.FIELD_FILE_UUID, "F1"), | |||
MapEntry.entry(TestIndexDefinition.FIELD_TEST_UUID, "U1"), | |||
MapEntry.entry(TestIndexDefinition.FIELD_NAME, "N1") | |||
); | |||
MapEntry.entry(TestIndexDefinition.FIELD_NAME, "N1")); | |||
// null values | |||
assertThat(doc).containsKeys( | |||
TestIndexDefinition.FIELD_DURATION_IN_MS, | |||
TestIndexDefinition.FIELD_STACKTRACE, | |||
TestIndexDefinition.FIELD_MESSAGE, | |||
TestIndexDefinition.FIELD_STATUS, | |||
TestIndexDefinition.FIELD_COVERED_FILES | |||
); | |||
TestIndexDefinition.FIELD_COVERED_FILES); | |||
} | |||
@Test | |||
@@ -175,22 +170,21 @@ public class TestResultSetIteratorTest { | |||
} | |||
} | |||
private static List<FileSourceDb.Test> newFakeTests(int numberOfTests) { | |||
List<FileSourceDb.Test> tests = new ArrayList<>(); | |||
private static List<FileSources.Test> newFakeTests(int numberOfTests) { | |||
List<FileSources.Test> tests = new ArrayList<>(); | |||
for (int i = 1; i <= numberOfTests; i++) { | |||
FileSourceDb.Test.Builder test = FileSourceDb.Test.newBuilder() | |||
FileSources.Test.Builder test = FileSources.Test.newBuilder() | |||
.setUuid("TEST_FILE_UUID_" + i) | |||
.setName("NAME_" + i) | |||
.setStatus(TestStatus.FAILURE) | |||
.setStatus(FileSources.Test.TestStatus.FAILURE) | |||
.setStacktrace("STACKTRACE_" + i) | |||
.setMsg("MESSAGE_" + i) | |||
.setExecutionTimeMs(i); | |||
for (int j = 1; j <= numberOfTests; j++) { | |||
test.addCoveredFile( | |||
FileSourceDb.Test.CoveredFile.newBuilder() | |||
FileSources.Test.CoveredFile.newBuilder() | |||
.setFileUuid("MAIN_FILE_UUID_" + j) | |||
.addCoveredLine(j) | |||
); | |||
.addCoveredLine(j)); | |||
} | |||
tests.add(test.build()); | |||
} |
@@ -123,6 +123,24 @@ | |||
<build> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.codehaus.mojo</groupId> | |||
<artifactId>build-helper-maven-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<id>add-source</id> | |||
<phase>generate-sources</phase> | |||
<goals> | |||
<goal>add-source</goal> | |||
</goals> | |||
<configuration> | |||
<sources> | |||
<source>src/main/gen-java</source> | |||
</sources> | |||
</configuration> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-surefire-plugin</artifactId> |
@@ -30,8 +30,7 @@ import javax.annotation.Nullable; | |||
import net.jpountz.lz4.LZ4BlockInputStream; | |||
import net.jpountz.lz4.LZ4BlockOutputStream; | |||
import org.apache.commons.io.IOUtils; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.server.source.db.FileSourceDb.Test; | |||
import org.sonar.db.FileSources; | |||
public class FileSourceDto { | |||
@@ -86,7 +85,7 @@ public class FileSourceDto { | |||
return this; | |||
} | |||
public static FileSourceDb.Data decodeSourceData(byte[] binaryData) { | |||
public static FileSources.Data decodeSourceData(byte[] binaryData) { | |||
// stream is always closed | |||
return decodeSourceData(new ByteArrayInputStream(binaryData)); | |||
} | |||
@@ -95,11 +94,11 @@ public class FileSourceDto { | |||
* Decompress and deserialize content of column FILE_SOURCES.BINARY_DATA. | |||
* The parameter "input" is always closed by this method. | |||
*/ | |||
public static FileSourceDb.Data decodeSourceData(InputStream binaryInput) { | |||
public static FileSources.Data decodeSourceData(InputStream binaryInput) { | |||
LZ4BlockInputStream lz4Input = null; | |||
try { | |||
lz4Input = new LZ4BlockInputStream(binaryInput); | |||
return FileSourceDb.Data.parseFrom(lz4Input); | |||
return FileSources.Data.parseFrom(lz4Input); | |||
} catch (IOException e) { | |||
throw new IllegalStateException("Fail to decompress and deserialize source data", e); | |||
} finally { | |||
@@ -108,10 +107,10 @@ public class FileSourceDto { | |||
} | |||
/** | |||
* Serialize and compress protobuf message {@link org.sonar.server.source.db.FileSourceDb.Data} | |||
* Serialize and compress protobuf message {@link org.sonar.db.FileSources.Data} | |||
* in the column BINARY_DATA. | |||
*/ | |||
public static byte[] encodeSourceData(FileSourceDb.Data data) { | |||
public static byte[] encodeSourceData(FileSources.Data data) { | |||
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); | |||
LZ4BlockOutputStream compressedOutput = new LZ4BlockOutputStream(byteOutput); | |||
try { | |||
@@ -125,7 +124,7 @@ public class FileSourceDto { | |||
} | |||
} | |||
public static List<Test> decodeTestData(byte[] binaryData) { | |||
public static List<FileSources.Test> decodeTestData(byte[] binaryData) { | |||
// stream is always closed | |||
return decodeTestData(new ByteArrayInputStream(binaryData)); | |||
} | |||
@@ -134,15 +133,15 @@ public class FileSourceDto { | |||
* Decompress and deserialize content of column FILE_SOURCES.BINARY_DATA. | |||
* The parameter "input" is always closed by this method. | |||
*/ | |||
public static List<Test> decodeTestData(InputStream binaryInput) { | |||
public static List<FileSources.Test> decodeTestData(InputStream binaryInput) { | |||
LZ4BlockInputStream lz4Input = null; | |||
List<Test> tests = new ArrayList<>(); | |||
List<FileSources.Test> tests = new ArrayList<>(); | |||
try { | |||
lz4Input = new LZ4BlockInputStream(binaryInput); | |||
Test currentTest; | |||
FileSources.Test currentTest; | |||
do { | |||
currentTest = Test.parseDelimitedFrom(lz4Input); | |||
currentTest = FileSources.Test.parseDelimitedFrom(lz4Input); | |||
if (currentTest != null) { | |||
tests.add(currentTest); | |||
} | |||
@@ -156,14 +155,14 @@ public class FileSourceDto { | |||
} | |||
/** | |||
* Serialize and compress protobuf message {@link org.sonar.server.source.db.FileSourceDb.Data} | |||
* Serialize and compress protobuf message {@link org.sonar.db.FileSources.Data} | |||
* in the column BINARY_DATA. | |||
*/ | |||
public static byte[] encodeTestData(List<Test> tests) { | |||
public static byte[] encodeTestData(List<FileSources.Test> tests) { | |||
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); | |||
LZ4BlockOutputStream compressedOutput = new LZ4BlockOutputStream(byteOutput); | |||
try { | |||
for (Test test : tests) { | |||
for (FileSources.Test test : tests) { | |||
test.writeDelimitedTo(compressedOutput); | |||
} | |||
compressedOutput.close(); | |||
@@ -176,14 +175,14 @@ public class FileSourceDto { | |||
} | |||
/** | |||
* Compressed value of serialized protobuf message {@link org.sonar.server.source.db.FileSourceDb.Data} | |||
* Compressed value of serialized protobuf message {@link org.sonar.db.FileSources.Data} | |||
*/ | |||
public byte[] getBinaryData() { | |||
return binaryData; | |||
} | |||
/** | |||
* Set compressed value of the protobuf message {@link org.sonar.server.source.db.FileSourceDb.Data} | |||
* Set compressed value of the protobuf message {@link org.sonar.db.FileSources.Data} | |||
*/ | |||
public FileSourceDto setBinaryData(byte[] data) { | |||
this.binaryData = data; | |||
@@ -191,26 +190,26 @@ public class FileSourceDto { | |||
} | |||
/** | |||
* Compressed value of serialized protobuf message {@link org.sonar.server.source.db.FileSourceDb.Data} | |||
* Compressed value of serialized protobuf message {@link org.sonar.db.FileSources.Data} | |||
*/ | |||
public FileSourceDb.Data getSourceData() { | |||
public FileSources.Data getSourceData() { | |||
return decodeSourceData(binaryData); | |||
} | |||
public FileSourceDto setSourceData(FileSourceDb.Data data) { | |||
public FileSourceDto setSourceData(FileSources.Data data) { | |||
this.dataType = Type.SOURCE; | |||
this.binaryData = encodeSourceData(data); | |||
return this; | |||
} | |||
/** | |||
* Compressed value of serialized protobuf message {@link org.sonar.server.source.db.FileSourceDb.Data} | |||
* Compressed value of serialized protobuf message {@link org.sonar.db.FileSources.Data} | |||
*/ | |||
public List<Test> getTestData() { | |||
public List<FileSources.Test> getTestData() { | |||
return decodeTestData(binaryData); | |||
} | |||
public FileSourceDto setTestData(List<Test> data) { | |||
public FileSourceDto setTestData(List<FileSources.Test> data) { | |||
this.dataType = Type.TEST; | |||
this.binaryData = encodeTestData(data); | |||
return this; |
@@ -38,7 +38,7 @@ import org.sonar.db.version.BaseDataChange; | |||
import org.sonar.db.version.MassUpdate; | |||
import org.sonar.db.version.Select; | |||
import org.sonar.db.version.SqlStatement; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
public class FeedFileSourcesBinaryData extends BaseDataChange { | |||
@@ -63,7 +63,7 @@ public class FeedFileSourcesBinaryData extends BaseDataChange { | |||
} | |||
private byte[] toBinary(Long fileSourceId, @Nullable String data) { | |||
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); | |||
FileSources.Data.Builder dataBuilder = FileSources.Data.newBuilder(); | |||
CSVParser parser = null; | |||
try { | |||
if (data != null) { | |||
@@ -74,7 +74,7 @@ public class FeedFileSourcesBinaryData extends BaseDataChange { | |||
CSVRecord row = rows.next(); | |||
if (row.size() == 16) { | |||
FileSourceDb.Line.Builder lineBuilder = dataBuilder.addLinesBuilder(); | |||
FileSources.Line.Builder lineBuilder = dataBuilder.addLinesBuilder(); | |||
lineBuilder.setLine(line); | |||
String s = row.get(0); | |||
if (StringUtils.isNotEmpty(s)) { |
@@ -18,25 +18,15 @@ | |||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
/* | |||
Notes | |||
- "required" fields are not used as recommended by Google to keep forward-compatibility: | |||
https://developers.google.com/protocol-buffers/docs/proto#simple | |||
- the related Java files are not generated during build. Indeed the existing protoc maven | |||
plugins require protobuf to be installed on boxes. That means that generated Java files | |||
are updated and committed for each change (see src/main/gen-java). | |||
*/ | |||
// structure of db column FILE_SOURCES.BINARY_DATA | |||
// Temporarily in sonar-batch-protocol as this db table | |||
// is still fed on batch-side. However generated sources | |||
// are already in correct package | |||
// Structure of db column FILE_SOURCES.BINARY_DATA | |||
// Package must not be changed for backward-compatibility | |||
// with the DB rows inserted in DB before 5.2 | |||
package org.sonar.server.source.db; | |||
// The java package can be changed without breaking compatibility. | |||
// it impacts only the generated Java code. | |||
option java_package = "org.sonar.db"; | |||
option optimize_for = SPEED; | |||
message Line { | |||
@@ -68,6 +58,7 @@ message Line { | |||
repeated int32 duplication = 17 [packed = true]; | |||
} | |||
// TODO should be dropped as it prevents streaming | |||
message Data { | |||
repeated Line lines = 1; | |||
} |
@@ -23,7 +23,7 @@ package org.sonar.db.source; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import org.junit.Test; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import org.sonar.db.FileSources; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -31,14 +31,13 @@ public class FileSourceDtoTest { | |||
@Test | |||
public void encode_and_decode_test_data() { | |||
List<FileSourceDb.Test> tests = Arrays.asList( | |||
FileSourceDb.Test.newBuilder() | |||
List<FileSources.Test> tests = Arrays.asList( | |||
FileSources.Test.newBuilder() | |||
.setName("name#1") | |||
.build(), | |||
FileSourceDb.Test.newBuilder() | |||
FileSources.Test.newBuilder() | |||
.setName("name#2") | |||
.build() | |||
); | |||
.build()); | |||
FileSourceDto underTest = new FileSourceDto().setTestData(tests); | |||
@@ -30,9 +30,9 @@ import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.sonar.api.utils.System2; | |||
import org.sonar.db.DbTester; | |||
import org.sonar.db.FileSources; | |||
import org.sonar.db.source.FileSourceDto; | |||
import org.sonar.db.version.MigrationStep; | |||
import org.sonar.server.source.db.FileSourceDb; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -55,7 +55,7 @@ public class FeedFileSourcesBinaryDataTest { | |||
assertThat(count).isEqualTo(3); | |||
try (Connection connection = db.openConnection()) { | |||
FileSourceDb.Data data = selectData(connection, 1L); | |||
FileSources.Data data = selectData(connection, 1L); | |||
assertThat(data.getLinesCount()).isEqualTo(4); | |||
assertThat(data.getLines(0).getScmRevision()).isEqualTo("aef12a"); | |||
@@ -80,7 +80,7 @@ public class FeedFileSourcesBinaryDataTest { | |||
migration.execute(); | |||
} | |||
private FileSourceDb.Data selectData(Connection connection, long fileSourceId) throws SQLException { | |||
private FileSources.Data selectData(Connection connection, long fileSourceId) throws SQLException { | |||
PreparedStatement pstmt = connection.prepareStatement("select binary_data from file_sources where id=?"); | |||
ResultSet rs = null; | |||
try { |