summaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-batch')
-rw-r--r--sonar-batch/pom.xml19
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchComponents.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java4
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/cpd/index/DbDuplicationsIndex.java106
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/cpd/index/SonarDuplicationsIndex.java28
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/issue/tracking/ServerIssueFromDb.java62
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/rule/UsedQProfiles.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java5
-rw-r--r--sonar-batch/src/main/resources/org/sonar/batch/bootstrapper/logback.xml2
-rw-r--r--sonar-batch/src/main/resources/org/sonar/batch/logback.xml2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java3
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginInstallerTest.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/issue/tracking/IssueTrackingTest.java391
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/report/ReportPublisherTest.java6
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/rule/QProfileSensorTest.java2
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/rule/UsedQProfilesTest.java2
16 files changed, 14 insertions, 624 deletions
diff --git a/sonar-batch/pom.xml b/sonar-batch/pom.xml
index fdc637497e1..9c5ab4e2156 100644
--- a/sonar-batch/pom.xml
+++ b/sonar-batch/pom.xml
@@ -32,7 +32,6 @@
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
-
<dependency>
<groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-core</artifactId>
@@ -117,29 +116,11 @@
</dependency>
<dependency>
<groupId>org.codehaus.sonar</groupId>
- <artifactId>sonar-core</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.dbunit</groupId>
- <artifactId>dbunit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.codehaus.sonar</groupId>
<artifactId>sonar-java-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <!-- local database -->
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>com.google.code.bean-matchers</groupId>
<artifactId>bean-matchers</artifactId>
<scope>test</scope>
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchComponents.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchComponents.java
index 353bf44c9c7..ae4a35f7162 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchComponents.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchComponents.java
@@ -49,7 +49,7 @@ import org.sonar.batch.scm.ScmSensor;
import org.sonar.batch.source.CodeColorizerSensor;
import org.sonar.batch.source.LinesSensor;
import org.sonar.core.config.CorePropertyDefinitions;
-import org.sonar.core.resource.DefaultResourceTypes;
+import org.sonar.core.component.DefaultResourceTypes;
public class BatchComponents {
private BatchComponents() {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java
index 55cec2910ed..3310365a856 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchPluginInstaller.java
@@ -34,8 +34,8 @@ import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
import org.sonar.core.platform.PluginInfo;
-import org.sonar.core.plugins.RemotePlugin;
-import org.sonar.core.plugins.RemotePluginFile;
+import org.sonar.core.platform.RemotePlugin;
+import org.sonar.core.platform.RemotePluginFile;
import org.sonar.home.cache.FileCache;
/**
diff --git a/sonar-batch/src/main/java/org/sonar/batch/cpd/index/DbDuplicationsIndex.java b/sonar-batch/src/main/java/org/sonar/batch/cpd/index/DbDuplicationsIndex.java
deleted file mode 100644
index 5e2908d23f0..00000000000
--- a/sonar-batch/src/main/java/org/sonar/batch/cpd/index/DbDuplicationsIndex.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * 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.batch.cpd.index;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
-import org.sonar.batch.index.BatchComponentCache;
-import org.sonar.core.duplication.DuplicationUnitDto;
-import org.sonar.duplications.block.Block;
-import org.sonar.duplications.block.ByteArray;
-
-public class DbDuplicationsIndex {
-
- private final Map<ByteArray, Collection<Block>> cache = Maps.newHashMap();
-
- private final BatchComponentCache resourceCache;
-
- public DbDuplicationsIndex(BatchComponentCache resourceCache) {
- this.resourceCache = resourceCache;
- }
-
- int getSnapshotIdFor(InputFile inputFile) {
- return resourceCache.get(((DefaultInputFile) inputFile).key()).snapshotId();
- }
-
- public void prepareCache(InputFile inputFile) {
- List<DuplicationUnitDto> units = new ArrayList<>();
- cache.clear();
- // TODO Godin: maybe remove conversion of units to blocks?
- for (DuplicationUnitDto unit : units) {
- String hash = unit.getHash();
- String resourceKey = unit.getResourceKey();
- int indexInFile = unit.getIndexInFile();
- int startLine = unit.getStartLine();
- int endLine = unit.getEndLine();
-
- // TODO Godin: in fact we could work directly with id instead of key - this will allow to decrease memory consumption
- Block block = Block.builder()
- .setResourceId(resourceKey)
- .setBlockHash(new ByteArray(hash))
- .setIndexInFile(indexInFile)
- .setLines(startLine, endLine)
- .build();
-
- // Group blocks by hash
- Collection<Block> sameHash = cache.get(block.getBlockHash());
- if (sameHash == null) {
- sameHash = Lists.newArrayList();
- cache.put(block.getBlockHash(), sameHash);
- }
- sameHash.add(block);
- }
- }
-
- public Collection<Block> getByHash(ByteArray hash) {
- Collection<Block> result = cache.get(hash);
- if (result != null) {
- return result;
- } else {
- return Collections.emptyList();
- }
- }
-
- public void insert(InputFile inputFile, Collection<Block> blocks) {
- int resourceSnapshotId = getSnapshotIdFor(inputFile);
-
- // TODO Godin: maybe remove conversion of blocks to units?
- List<DuplicationUnitDto> units = Lists.newArrayList();
- for (Block block : blocks) {
- DuplicationUnitDto unit = new DuplicationUnitDto(
- // TODO batch is no more creating snapshot
- null,
- resourceSnapshotId,
- block.getBlockHash().toString(),
- block.getIndexInFile(),
- block.getStartLine(),
- block.getEndLine());
- units.add(unit);
- }
- }
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/cpd/index/SonarDuplicationsIndex.java b/sonar-batch/src/main/java/org/sonar/batch/cpd/index/SonarDuplicationsIndex.java
index dacedc06b74..ab583d672dd 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/cpd/index/SonarDuplicationsIndex.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/cpd/index/SonarDuplicationsIndex.java
@@ -19,7 +19,7 @@
*/
package org.sonar.batch.cpd.index;
-import com.google.common.collect.Lists;
+import java.util.Collection;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.duplications.block.Block;
import org.sonar.duplications.block.ByteArray;
@@ -27,47 +27,23 @@ import org.sonar.duplications.index.AbstractCloneIndex;
import org.sonar.duplications.index.CloneIndex;
import org.sonar.duplications.index.PackedMemoryCloneIndex;
-import java.util.Collection;
-import java.util.List;
-
public class SonarDuplicationsIndex extends AbstractCloneIndex {
private final CloneIndex mem = new PackedMemoryCloneIndex();
- private final DbDuplicationsIndex db;
-
- public SonarDuplicationsIndex() {
- this.db = null;
- }
-
- public SonarDuplicationsIndex(DbDuplicationsIndex db) {
- this.db = db;
- }
public void insert(InputFile inputFile, Collection<Block> blocks) {
for (Block block : blocks) {
mem.insert(block);
}
- if (db != null) {
- db.insert(inputFile, blocks);
- }
}
public Collection<Block> getByInputFile(InputFile inputFile, String resourceKey) {
- if (db != null) {
- db.prepareCache(inputFile);
- }
return mem.getByResourceId(resourceKey);
}
@Override
public Collection<Block> getBySequenceHash(ByteArray hash) {
- if (db == null) {
- return mem.getBySequenceHash(hash);
- } else {
- List<Block> result = Lists.newArrayList(mem.getBySequenceHash(hash));
- result.addAll(db.getByHash(hash));
- return result;
- }
+ return mem.getBySequenceHash(hash);
}
@Override
diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/ServerIssueFromDb.java b/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/ServerIssueFromDb.java
deleted file mode 100644
index d858d3a745f..00000000000
--- a/sonar-batch/src/main/java/org/sonar/batch/issue/tracking/ServerIssueFromDb.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.batch.issue.tracking;
-
-import org.sonar.api.rule.RuleKey;
-import org.sonar.core.issue.db.IssueDto;
-
-public class ServerIssueFromDb implements ServerIssue {
-
- private IssueDto dto;
-
- public ServerIssueFromDb(IssueDto dto) {
- this.dto = dto;
- }
-
- public IssueDto getDto() {
- return dto;
- }
-
- @Override
- public String key() {
- return dto.getKee();
- }
-
- @Override
- public RuleKey ruleKey() {
- return dto.getRuleKey();
- }
-
- @Override
- public String checksum() {
- return dto.getChecksum();
- }
-
- @Override
- public Integer line() {
- return dto.getLine();
- }
-
- @Override
- public String message() {
- return dto.getMessage();
- }
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/rule/UsedQProfiles.java b/sonar-batch/src/main/java/org/sonar/batch/rule/UsedQProfiles.java
index 15a6d3cd3ae..e2911b382d5 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/rule/UsedQProfiles.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/rule/UsedQProfiles.java
@@ -25,7 +25,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.sonar.api.utils.text.JsonWriter;
-import org.sonar.core.UtcDateUtils;
+import org.sonar.core.util.UtcDateUtils;
import javax.annotation.concurrent.Immutable;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
index a224d4a3fb8..0d844339fba 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
@@ -19,8 +19,6 @@
*/
package org.sonar.batch.scan;
-import org.sonar.batch.bootstrap.ProjectTempFolderProvider;
-
import com.google.common.annotations.VisibleForTesting;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.InstantiationStrategy;
@@ -41,6 +39,7 @@ import org.sonar.batch.bootstrap.ExtensionInstaller;
import org.sonar.batch.bootstrap.ExtensionMatcher;
import org.sonar.batch.bootstrap.ExtensionUtils;
import org.sonar.batch.bootstrap.MetricProvider;
+import org.sonar.batch.bootstrap.ProjectTempFolderProvider;
import org.sonar.batch.bootstrapper.EnvironmentInformation;
import org.sonar.batch.deprecated.components.DefaultResourceCreationLock;
import org.sonar.batch.duplication.DuplicationCache;
@@ -77,7 +76,6 @@ import org.sonar.batch.test.TestableBuilder;
import org.sonar.core.issue.IssueUpdater;
import org.sonar.core.issue.workflow.FunctionExecutor;
import org.sonar.core.issue.workflow.IssueWorkflow;
-import org.sonar.core.permission.PermissionFacade;
import org.sonar.core.platform.ComponentContainer;
public class ProjectScanContainer extends ComponentContainer {
@@ -131,7 +129,6 @@ public class ProjectScanContainer extends ComponentContainer {
EventBus.class,
PhasesTimeProfiler.class,
ResourceTypes.class,
- PermissionFacade.class,
DefaultProjectTree.class,
ProjectExclusions.class,
ProjectReactorValidator.class,
diff --git a/sonar-batch/src/main/resources/org/sonar/batch/bootstrapper/logback.xml b/sonar-batch/src/main/resources/org/sonar/batch/bootstrapper/logback.xml
index 4cda7344a24..99f956e4b4c 100644
--- a/sonar-batch/src/main/resources/org/sonar/batch/bootstrapper/logback.xml
+++ b/sonar-batch/src/main/resources/org/sonar/batch/bootstrapper/logback.xml
@@ -24,7 +24,7 @@
</logger>
<!-- sonar.showSql -->
- <!-- see also org.sonar.core.persistence.MyBatis#configureLogback() -->
+ <!-- see also org.sonar.db.MyBatis#configureLogback() -->
<logger name="org.mybatis">
<level value="${SQL_LOGGER_LEVEL:-WARN}"/>
</logger>
diff --git a/sonar-batch/src/main/resources/org/sonar/batch/logback.xml b/sonar-batch/src/main/resources/org/sonar/batch/logback.xml
index 8efa6dfeaad..198cd9c1bc6 100644
--- a/sonar-batch/src/main/resources/org/sonar/batch/logback.xml
+++ b/sonar-batch/src/main/resources/org/sonar/batch/logback.xml
@@ -20,7 +20,7 @@
</logger>
<!-- sonar.showSql -->
- <!-- see also org.sonar.core.persistence.MyBatis#configureLogback() -->
+ <!-- see also org.sonar.db.MyBatis#configureLogback() -->
<logger name="org.apache.ibatis">
<level value="WARN"/>
</logger>
diff --git a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
index 38305cc1c30..a892e726d1e 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java
@@ -27,13 +27,12 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.config.Settings;
import org.sonar.api.resources.Project;
import org.sonar.api.utils.System2;
-import org.sonar.jpa.test.AbstractDbUnitTestCase;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public class ProjectConfiguratorTest extends AbstractDbUnitTestCase {
+public class ProjectConfiguratorTest {
System2 system2;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginInstallerTest.java b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginInstallerTest.java
index 319f056dda1..c8d2e367475 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginInstallerTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/bootstrap/BatchPluginInstallerTest.java
@@ -23,7 +23,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
-import org.sonar.core.plugins.RemotePlugin;
+import org.sonar.core.platform.RemotePlugin;
import org.sonar.home.cache.FileCache;
import java.io.File;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/issue/tracking/IssueTrackingTest.java b/sonar-batch/src/test/java/org/sonar/batch/issue/tracking/IssueTrackingTest.java
deleted file mode 100644
index 616c7fb6ed4..00000000000
--- a/sonar-batch/src/test/java/org/sonar/batch/issue/tracking/IssueTrackingTest.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * 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.batch.issue.tracking;
-
-import com.google.common.collect.Lists;
-import com.google.common.io.Resources;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.internal.DefaultInputFile;
-import org.sonar.api.issue.Issue;
-import org.sonar.core.issue.DefaultIssue;
-import org.sonar.api.resources.Project;
-import org.sonar.api.resources.Resource;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.core.issue.db.IssueDto;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.Collections;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
-
-public class IssueTrackingTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- IssueTracking tracking;
- Resource project;
- SourceHashHolder sourceHashHolder;
- ServerLineHashesLoader lastSnapshots;
- long violationId = 0;
-
- @Before
- public void before() {
- lastSnapshots = mock(ServerLineHashesLoader.class);
-
- project = mock(Project.class);
- tracking = new IssueTracking();
- }
-
- @Test
- public void key_should_be_the_prioritary_field_to_check() {
- ServerIssueFromDb referenceIssue1 = newReferenceIssue("message", 10, "squid", "AvoidCycle", "checksum1");
- referenceIssue1.getDto().setKee("100");
- ServerIssueFromDb referenceIssue2 = newReferenceIssue("message", 10, "squid", "AvoidCycle", "checksum2");
- referenceIssue2.getDto().setKee("200");
-
- // exactly the fields of referenceIssue1 but not the same key
- DefaultIssue newIssue = newDefaultIssue("message", 10, RuleKey.of("squid", "AvoidCycle"), "checksum1").setKey("200");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), Lists.<ServerIssue>newArrayList(referenceIssue1, referenceIssue2), null, result);
- // same key
- assertThat(result.matching(newIssue)).isSameAs(referenceIssue2);
- }
-
- @Test
- public void checksum_should_have_greater_priority_than_line() {
- ServerIssue referenceIssue1 = newReferenceIssue("message", 1, "squid", "AvoidCycle", "checksum1");
- ServerIssue referenceIssue2 = newReferenceIssue("message", 3, "squid", "AvoidCycle", "checksum2");
-
- DefaultIssue newIssue1 = newDefaultIssue("message", 3, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- DefaultIssue newIssue2 = newDefaultIssue("message", 5, RuleKey.of("squid", "AvoidCycle"), "checksum2");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue1, newIssue2), newArrayList(referenceIssue1, referenceIssue2), null, result);
- assertThat(result.matching(newIssue1)).isSameAs(referenceIssue1);
- assertThat(result.matching(newIssue2)).isSameAs(referenceIssue2);
- }
-
- /**
- * SONAR-2928
- */
- @Test
- public void same_rule_and_null_line_and_checksum_but_different_messages() {
- DefaultIssue newIssue = newDefaultIssue("new message", null, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("old message", null, "squid", "AvoidCycle", "checksum1");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isSameAs(referenceIssue);
- }
-
- @Test
- public void same_rule_and_line_and_checksum_but_different_messages() {
- DefaultIssue newIssue = newDefaultIssue("new message", 1, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("old message", 1, "squid", "AvoidCycle", "checksum1");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isSameAs(referenceIssue);
- }
-
- @Test
- public void same_rule_and_line_message() {
- DefaultIssue newIssue = newDefaultIssue("message", 1, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("message", 1, "squid", "AvoidCycle", "checksum2");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isSameAs(referenceIssue);
- }
-
- @Test
- public void should_ignore_reference_measure_without_checksum() {
- DefaultIssue newIssue = newDefaultIssue("message", 1, RuleKey.of("squid", "AvoidCycle"), null);
- ServerIssue referenceIssue = newReferenceIssue("message", 1, "squid", "NullDeref", null);
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isNull();
- }
-
- @Test
- public void same_rule_and_message_and_checksum_but_different_line() {
- DefaultIssue newIssue = newDefaultIssue("message", 1, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("message", 2, "squid", "AvoidCycle", "checksum1");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isSameAs(referenceIssue);
- }
-
- /**
- * SONAR-2812
- */
- @Test
- public void same_checksum_and_rule_but_different_line_and_different_message() {
- DefaultIssue newIssue = newDefaultIssue("new message", 1, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("old message", 2, "squid", "AvoidCycle", "checksum1");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isSameAs(referenceIssue);
- }
-
- @Test
- public void should_create_new_issue_when_same_rule_same_message_but_different_line_and_checksum() {
- DefaultIssue newIssue = newDefaultIssue("message", 1, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("message", 2, "squid", "AvoidCycle", "checksum2");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isNull();
- }
-
- @Test
- public void should_not_track_issue_if_different_rule() {
- DefaultIssue newIssue = newDefaultIssue("message", 1, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("message", 1, "squid", "NullDeref", "checksum1");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isNull();
- }
-
- @Test
- public void should_compare_issues_with_database_format() {
- // issue messages are trimmed and can be abbreviated when persisted in database.
- // Comparing issue messages must use the same format.
- DefaultIssue newIssue = newDefaultIssue(" message ", 1, RuleKey.of("squid", "AvoidCycle"), "checksum1");
- ServerIssue referenceIssue = newReferenceIssue("message", 1, "squid", "AvoidCycle", "checksum2");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(newArrayList(newIssue), newArrayList(referenceIssue), null, result);
- assertThat(result.matching(newIssue)).isSameAs(referenceIssue);
- }
-
- @Test
- public void past_issue_not_associated_with_line_should_not_cause_npe() throws Exception {
- initLastHashes("example2-v1", "example2-v2");
-
- DefaultIssue newIssue = newDefaultIssue("Indentation", 9, RuleKey.of("squid", "AvoidCycle"), "foo");
- ServerIssue referenceIssue = newReferenceIssue("2 branches need to be covered", null, "squid", "AvoidCycle", null);
-
- IssueTrackingResult result = tracking.track(sourceHashHolder, newArrayList(referenceIssue), newArrayList(newIssue));
-
- assertThat(result.matched()).isEmpty();
- }
-
- @Test
- public void new_issue_not_associated_with_line_should_not_cause_npe() throws Exception {
- initLastHashes("example2-v1", "example2-v2");
-
- DefaultIssue newIssue = newDefaultIssue("1 branch need to be covered", null, RuleKey.of("squid", "AvoidCycle"), "foo");
- ServerIssue referenceIssue = newReferenceIssue("Indentationd", 7, "squid", "AvoidCycle", null);
-
- IssueTrackingResult result = tracking.track(sourceHashHolder, newArrayList(referenceIssue), newArrayList(newIssue));
-
- assertThat(result.matched()).isEmpty();
- }
-
- /**
- * SONAR-2928
- */
- @Test
- public void issue_not_associated_with_line() throws Exception {
- initLastHashes("example2-v1", "example2-v2");
-
- DefaultIssue newIssue = newDefaultIssue("1 branch need to be covered", null, RuleKey.of("squid", "AvoidCycle"), null);
- ServerIssue referenceIssue = newReferenceIssue("2 branches need to be covered", null, "squid", "AvoidCycle", null);
-
- IssueTrackingResult result = tracking.track(sourceHashHolder, newArrayList(referenceIssue), newArrayList(newIssue));
-
- assertThat(result.matching(newIssue)).isEqualTo(referenceIssue);
- }
-
- @Test
- public void check_valid_line() throws Exception {
- initLastHashes("example2-v1", "example2-v2");
-
- DefaultIssue newIssue = newDefaultIssue("1 branch need to be covered", 200, RuleKey.of("squid", "AvoidCycle"), null);
-
- thrown
- .expectMessage("Invalid line number for issue");
-
- tracking.track(sourceHashHolder, Collections.<ServerIssue>emptyList(), newArrayList(newIssue));
- }
-
- /**
- * SONAR-3072
- */
- @Test
- public void should_track_issues_based_on_blocks_recognition_on_example1() throws Exception {
- initLastHashes("example1-v1", "example1-v2");
-
- ServerIssue referenceIssue1 = newReferenceIssue("Indentation", 7, "squid", "AvoidCycle", null);
- ServerIssue referenceIssue2 = newReferenceIssue("Indentation", 11, "squid", "AvoidCycle", null);
-
- DefaultIssue newIssue1 = newDefaultIssue("Indentation", 9, RuleKey.of("squid", "AvoidCycle"), null);
- DefaultIssue newIssue2 = newDefaultIssue("Indentation", 13, RuleKey.of("squid", "AvoidCycle"), null);
- DefaultIssue newIssue3 = newDefaultIssue("Indentation", 17, RuleKey.of("squid", "AvoidCycle"), null);
- DefaultIssue newIssue4 = newDefaultIssue("Indentation", 21, RuleKey.of("squid", "AvoidCycle"), null);
-
- IssueTrackingResult result = tracking.track(sourceHashHolder, Arrays.asList(referenceIssue1, referenceIssue2), Arrays.asList(newIssue1, newIssue2, newIssue3, newIssue4));
-
- assertThat(result.matching(newIssue1)).isNull();
- assertThat(result.matching(newIssue2)).isNull();
- assertThat(result.matching(newIssue3)).isSameAs(referenceIssue1);
- assertThat(result.matching(newIssue4)).isSameAs(referenceIssue2);
- }
-
- /**
- * SONAR-3072
- */
- @Test
- public void should_track_issues_based_on_blocks_recognition_on_example2() throws Exception {
- initLastHashes("example2-v1", "example2-v2");
-
- ServerIssue referenceIssue1 = newReferenceIssue("SystemPrintln", 5, "squid", "AvoidCycle", null);
-
- DefaultIssue newIssue1 = newDefaultIssue("SystemPrintln", 6, RuleKey.of("squid", "AvoidCycle"), null);
- DefaultIssue newIssue2 = newDefaultIssue("SystemPrintln", 10, RuleKey.of("squid", "AvoidCycle"), null);
- DefaultIssue newIssue3 = newDefaultIssue("SystemPrintln", 14, RuleKey.of("squid", "AvoidCycle"), null);
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(
- Arrays.asList(newIssue1, newIssue2, newIssue3),
- Arrays.asList(referenceIssue1),
- sourceHashHolder, result);
-
- assertThat(result.matching(newIssue1)).isNull();
- assertThat(result.matching(newIssue2)).isSameAs(referenceIssue1);
- assertThat(result.matching(newIssue3)).isNull();
- }
-
- @Test
- public void should_track_issues_based_on_blocks_recognition_on_example3() throws Exception {
- initLastHashes("example3-v1", "example3-v2");
-
- ServerIssue referenceIssue1 = newReferenceIssue("Avoid unused local variables such as 'j'.", 6, "squid", "AvoidCycle", "63c11570fc0a76434156be5f8138fa03");
- ServerIssue referenceIssue2 = newReferenceIssue("Avoid unused private methods such as 'myMethod()'.", 13, "squid", "NullDeref", "ef23288705d1ef1e512448ace287586e");
- ServerIssue referenceIssue3 = newReferenceIssue("Method 'avoidUtilityClass' is not designed for extension - needs to be abstract, final or empty.", 9, "pmd",
- "UnusedLocalVariable", "ed5cdd046fda82727d6fedd1d8e3a310");
-
- // New issue
- DefaultIssue newIssue1 = newDefaultIssue("Avoid unused local variables such as 'msg'.", 18, RuleKey.of("squid", "AvoidCycle"), "a24254126be2bf1a9b9a8db43f633733");
- // Same as referenceIssue2
- DefaultIssue newIssue2 = newDefaultIssue("Avoid unused private methods such as 'myMethod()'.", 13, RuleKey.of("squid", "NullDeref"), "ef23288705d1ef1e512448ace287586e");
- // Same as referenceIssue3
- DefaultIssue newIssue3 = newDefaultIssue("Method 'avoidUtilityClass' is not designed for extension - needs to be abstract, final or empty.", 9,
- RuleKey.of("pmd", "UnusedLocalVariable"), "ed5cdd046fda82727d6fedd1d8e3a310");
- // New issue
- DefaultIssue newIssue4 = newDefaultIssue("Method 'newViolation' is not designed for extension - needs to be abstract, final or empty.", 17,
- RuleKey.of("pmd", "UnusedLocalVariable"), "7d58ac9040c27e4ca2f11a0269e251e2");
- // Same as referenceIssue1
- DefaultIssue newIssue5 = newDefaultIssue("Avoid unused local variables such as 'j'.", 6, RuleKey.of("squid", "AvoidCycle"), "4432a2675ec3e1620daefe38386b51ef");
-
- IssueTrackingResult result = new IssueTrackingResult();
- tracking.mapIssues(
- Arrays.asList(newIssue1, newIssue2, newIssue3, newIssue4, newIssue5),
- Arrays.asList(referenceIssue1, referenceIssue2, referenceIssue3),
- sourceHashHolder, result);
-
- assertThat(result.matching(newIssue1)).isNull();
- assertThat(result.matching(newIssue2)).isSameAs(referenceIssue2);
- assertThat(result.matching(newIssue3)).isSameAs(referenceIssue3);
- assertThat(result.matching(newIssue4)).isNull();
- assertThat(result.matching(newIssue5)).isSameAs(referenceIssue1);
- }
-
- @Test
- public void dont_load_checksum_if_no_new_issue() {
- sourceHashHolder = mock(SourceHashHolder.class);
-
- ServerIssue referenceIssue = newReferenceIssue("2 branches need to be covered", null, "squid", "AvoidCycle", null);
-
- tracking.track(sourceHashHolder, newArrayList(referenceIssue), Collections.<DefaultIssue>emptyList());
-
- verifyZeroInteractions(lastSnapshots, sourceHashHolder);
- }
-
- private static String load(String name) throws IOException {
- return Resources.toString(IssueTrackingTest.class.getResource("IssueTrackingTest/" + name + ".txt"), StandardCharsets.UTF_8);
- }
-
- private DefaultIssue newDefaultIssue(String message, Integer line, RuleKey ruleKey, String checksum) {
- return new DefaultIssue().setMessage(message).setLine(line).setRuleKey(ruleKey).setChecksum(checksum).setStatus(Issue.STATUS_OPEN);
- }
-
- private ServerIssueFromDb newReferenceIssue(String message, Integer lineId, String ruleRepo, String ruleKey, String lineChecksum) {
- IssueDto referenceIssue = new IssueDto();
- Long id = violationId++;
- referenceIssue.setId(id);
- referenceIssue.setKee(Long.toString(id));
- referenceIssue.setLine(lineId);
- referenceIssue.setMessage(message);
- referenceIssue.setRuleKey(ruleRepo, ruleKey);
- referenceIssue.setChecksum(lineChecksum);
- referenceIssue.setResolution(null);
- referenceIssue.setStatus(Issue.STATUS_OPEN);
- return new ServerIssueFromDb(referenceIssue);
- }
-
- private void initLastHashes(String reference, String newSource) throws IOException {
- DefaultInputFile inputFile = mock(DefaultInputFile.class);
- File f = temp.newFile();
- when(inputFile.path()).thenReturn(f.toPath());
- when(inputFile.file()).thenReturn(f);
- when(inputFile.charset()).thenReturn(StandardCharsets.UTF_8);
- String data = load(newSource);
- when(inputFile.lines()).thenReturn(StringUtils.countMatches(data, "\n") + 1);
- FileUtils.write(f, data, StandardCharsets.UTF_8);
- when(inputFile.key()).thenReturn("foo:Action.java");
- when(lastSnapshots.getLineHashes("foo:Action.java")).thenReturn(computeHexHashes(load(reference)));
- sourceHashHolder = new SourceHashHolder(inputFile, lastSnapshots);
- }
-
- private String[] computeHexHashes(String source) {
- String[] lines = source.split("\n");
- String[] hashes = new String[lines.length];
- for (int i = 0; i < lines.length; i++) {
- hashes[i] = DigestUtils.md5Hex(lines[i].replaceAll("[\t ]", ""));
- }
- return hashes;
- }
-}
diff --git a/sonar-batch/src/test/java/org/sonar/batch/report/ReportPublisherTest.java b/sonar-batch/src/test/java/org/sonar/batch/report/ReportPublisherTest.java
index 8d2bdf973c7..ea301e425b0 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/report/ReportPublisherTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/report/ReportPublisherTest.java
@@ -29,20 +29,16 @@ import org.sonar.api.platform.Server;
import org.sonar.api.utils.TempFolder;
import org.sonar.batch.bootstrap.DefaultAnalysisMode;
import org.sonar.batch.bootstrap.ServerClient;
-import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.ImmutableProjectReactor;
-import org.sonar.jpa.test.AbstractDbUnitTestCase;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-public class ReportPublisherTest extends AbstractDbUnitTestCase {
+public class ReportPublisherTest {
private DefaultAnalysisMode mode;
- BatchComponentCache resourceCache = mock(BatchComponentCache.class);
-
private ImmutableProjectReactor reactor;
@Before
diff --git a/sonar-batch/src/test/java/org/sonar/batch/rule/QProfileSensorTest.java b/sonar-batch/src/test/java/org/sonar/batch/rule/QProfileSensorTest.java
index f362690979a..81a9afb5938 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/rule/QProfileSensorTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/rule/QProfileSensorTest.java
@@ -29,7 +29,7 @@ import org.sonar.api.batch.fs.internal.DefaultFileSystem;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.resources.Project;
import org.sonar.api.test.IsMeasure;
-import org.sonar.core.UtcDateUtils;
+import org.sonar.core.util.UtcDateUtils;
import java.util.Collections;
import java.util.Date;
diff --git a/sonar-batch/src/test/java/org/sonar/batch/rule/UsedQProfilesTest.java b/sonar-batch/src/test/java/org/sonar/batch/rule/UsedQProfilesTest.java
index 1a26aeba91d..2bdd9fe7401 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/rule/UsedQProfilesTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/rule/UsedQProfilesTest.java
@@ -20,7 +20,7 @@
package org.sonar.batch.rule;
import org.junit.Test;
-import org.sonar.core.UtcDateUtils;
+import org.sonar.core.util.UtcDateUtils;
import java.util.Arrays;
import java.util.Map;